c# - 演员班上课
问题描述
我有一个简单的类,看起来像这样:
public class MyClass<T>
{
public int Status { get; set; }
public T Value { get; set; }
}
为方便起见,我有另一个继承自 的类MyClass<string>
,以允许我在MyClass
没有泛型参数的情况下进行构造,例如:
public class MyClass : MyClass<string> { }
我希望能够转换MyClass<T>
为MyClass
,默认情况下这似乎不起作用。此示例强制转换引发以下错误:
MyClass<string> withT = new MyClass<string> { Status = 1, Value = "Somevalue" };
MyClass withoutT = (MyClass)withT;
无法将“MyClass`1[System.String]”类型的对象转换为“MyClass”
所以我相信我需要实现一些隐式/显式转换逻辑,如this answer中所述。
我已经更新MyClass<T>
如下,但是仍然抛出相同的错误:
public class MyClass<T>
{
public int Status { get; set; }
public T Value;
public static implicit operator MyClass(MyClass<T> myClass)
{
return new MyClass
{
Status = myClass.Status,
Value = myClass.Value.GetType() == typeof(string) ? myClass.Value.ToString() : null
};
}
}
谁能帮忙指出我哪里出错了?
解决方案
为什么不使用工厂?这是一个非常简单的例子:
public static class MyClass
{
public static MyClass<string> Create(string s, int status)
{
return new MyClass<string>(s, status);
}
}
...
var x = MyClass.Create("Foo", 0);
推荐阅读
- python - pandas concat 长度不等的数据帧并设置多索引
- javascript - 将图像剪辑为椭圆形
- javascript - 当有 2 个 `catch`es 时抛出正确的消息
- shell - 如何检索由 docker-compose.yml 启动的确切容器名称
- c# - ML.Net 无法从 MVC 项目的存储中加载模型
- javascript - 根据数组的元素从数组中提取元素
- python - Python MySQL 连接器:错误 #2003
- c++ - 何时使用 vkCmd* 函数的参数?
- firebase - React-Native Firebase 身份验证错误消息卡住直到第二次尝试
- android - 如何从 void 方法中使用 findViewById 获取 Recyclerview id