我有一个相当简单的问题,但 C# 中似乎没有解决方案。
我有大约 100 个Foo
类,每个类都实现一个static FromBytes()
方法。还有一些通用类将使用这些方法作为自己的FromBytes()
。但是泛型类不能使用这些static FromBytes()
方法,因为T.FromBytes(...)
是非法的。
我错过了什么还是没有办法实现这个功能?
public class Foo1
{
public static Foo1 FromBytes(byte[] bytes, ref int index)
{
// build Foo1 instance
return new Foo1()
{
Property1 = bytes[index++],
Property2 = bytes[index++],
// [...]
Property10 = bytes[index++]
};
}
public int Property1 { get; set; }
public int Property2 { get; set; }
// [...]
public int Property10 { get; set; }
}
//public class Foo2 { ... }
// [...]
//public class Foo100 { ... }
// Generic class which needs the static method of T to work
public class ListOfFoo<T> : System.Collections.Generic.List<T>
{
public static ListOfFoo<T> FromBytes(byte[] bytes, ref int index)
{
var count = bytes[index++];
var listOfFoo = new ListOfFoo<T>();
for (var i = 0; i < count; i++)
{
listOfFoo.Add(T.FromBytes(bytes, ref index)); // T.FromBytes(...) is illegal
}
return listOfFoo;
}
}
我认为选择一个答案作为接受的答案是不公平的,毕竟所有答案和评论都以不同的方式和他们的不同观点做出了贡献。如果有人对不同方法的优缺点进行了很好的概述,那就太好了。在它最好地帮助未来的开发人员之后,应该接受它。