这个很难拿到一个好头衔,所以我尽了最大的努力。
问题在于:
Dictionary<string,ILayer> _layers = new Dictionary<string,ILayer>();
_layers.Add("IntLayer",new Layer<int>());
_layers.Add("GuidLayer",new Layer<Guid>());
Guid value = _layers["GuidLayer"].GetValue(int x, int y);
课程:
public class Layer<T> : ILayer
{
public T[,] Matrix { get; set; }
public T GetValue(int x, int y)
{
return Matrix[x, y];
}
}
public interface ILayer
{
//T GetValue(int x, int y);
}
这个想法是能够存储不同类型的图层,并避免显式投射。虽然在尝试获取值时会知道类型,因此可以安全地进行转换,但是如果我想在整个层中应用某些东西,那么对于“通用”方法来说会更复杂一点。< / p>
是否可以创建此方案?我应该对这个问题采用完全不同的方式吗?
感谢您的帮助
答案 0 :(得分:2)
如果你想避免在客户端代码中进行显式转换,我可以考虑几个选项:
选项1
public interface ILayer
{
U GetValue<U>(int x, int y);
}
public class Layer<T> : ILayer
{
public T[,] Matrix { get; set; }
U ILayer.GetValue<U>(int x, int y)
{
return (U) (object) Matrix[x, y];
}
}
选项2
public interface ILayer
{
}
public class Layer<T> : ILayer
{
public T[,] Matrix { get; set; }
public T GetValue(int x, int y)
{
return Matrix[x, y];
}
}
public static class LayerExtensions
{
public static U GetValue<U>(this ILayer layer, int x, int y)
{
return ((Layer<U>)layer).GetValue(x, y);
}
}