简而言之,我试图让这段代码正常工作:
class it<X>
{
X[] data;
int pos;
public Y get<Y>()
{
return (Y) data[pos];
}
}
基本上,我有许多不同基元的数组需要作为不同的基元处理另一个地方。前面的代码不会编译,因为编译器不知道X和Y是什么。但是,确实如下:
public Y get<Y>()
{
return (Y) (object) data[pos];
}
然而,我得到运行时异常,如:
InvalidCastException: Cannot cast from source type to destination type.
it[System.Double].get[Single]()
这看起来很愚蠢,因为C#显然在浮点数和双打(以及其他基元)之间有一个强制转换。我猜它与拳击等有关,但我对C#很陌生,所以我不知道 - 我想我已经习惯了C ++模板。请注意,X和Y之间的转换始终存在 - 我可以用某种方式告诉编译器吗?
答案 0 :(得分:1)
您可以使用 for (int y = 0; y < image.Height; y++)
{
for (int x = 0; x < image.Width; x++)
{
string path = @"E:\Example.txt";
Color pixel = image.GetPixel(x, y);
if (!File.Exists(path))
{
// File.Create(path);
File.Create(path).Dispose();
using (TextWriter tw = new StreamWriter(path))
{
tw.WriteLine("Value at" + x + "" + y + "" + "is:" +pixel);
tw.Close();
}
}
else if (File.Exists(path))
{
File.AppendAllText(path,
"Value at"+"" + x + "" + y + "" + "is:" +""+ pixel + Environment.NewLine);
//using (TextWriter tw = new StreamWriter(path))
//{
// tw.WriteLine("The next line!");
// tw.Close();
//}
}
if (pixel.R == keywordBytes[0] && pixel.G == keywordBytes[1] && pixel.B == keywordBytes[2])
{
firstMatchingBytePos = new Point(x, y);
KeywordFound(keyword, firstMatchingBytePos);
}
}
}
&#39; s Convert
- 方法:
ChangeType
向您的类和方法添加一些generic constraints也可能是个好主意,以确保只能传递基元:
public Y get<Y>()
{
return (Y)Convert.ChangeType(data[pos], typeof(Y));
}