我想知道是否有人可以想到一个很好的解决方法,因为无法在自己的类上为对象添加隐式强制转换操作符.以下示例说明了我想要的代码类型
public class Response
{
public string Contents { get; set; }
public static implicit operator Response(object source)
{
return new Response { Contents = source.ToString(); };
}
}
Run Code Online (Sandbox Code Playgroud)
这将无法编译,因为它扰乱了C#编译器,它告诉我
user-defined conversions to or from a base class are not allowed
Run Code Online (Sandbox Code Playgroud)
将响应转化为响应和行动
public static implicit operator Response<T>(T source)
Run Code Online (Sandbox Code Playgroud)
遗憾的是不是一种选择.我的猜测是否定的,但任何人都可以想到一个很好的解决方法/黑客来实现这一点.我很乐意能够做到
public Response Foo()
{
return new Bar();
}
Run Code Online (Sandbox Code Playgroud)
最后得到一个表示Whatever.Namespace.Bar的Response.Contents
我不喜欢这样的隐式转换 - 其他答案已经解释了为什么不允许这样做。如果您确实不想在代码中调用构造函数,则可以轻松进行转换的一种选择是通过扩展方法:
public static ResponseExtensions
{
public static Response ToResponse(this object source)
{
return new Response { Contents = source.ToString(); };
}
}
Run Code Online (Sandbox Code Playgroud)
那么你至少可以拥有:
public Response Foo()
{
return new Bar().ToResponse();
}
Run Code Online (Sandbox Code Playgroud)
一般来说,我对 上的扩展方法持谨慎态度object,请注意...将任何对象转换为真的Response有意义吗?
您的约束问题无法解决。错误中明确指出了这一点:user-defined conversions to or from a base class are not allowed。由于每个类都会继承object,所以你有你的答案。继承自Responsetoobject意味着 的所有实例Response也是 的实例object!隐式转换 from objecttoResponse意味着everyobject是 aResponse,这是无稽之谈!
在你的情况下,你可以简单地定义一个Bar->Response运算符吗?
当您执行类型转换时,您必须能够以某种方式定义转换算法。您能告诉我如何将object.NET 中最通用的类型(仅具有哈希码和字符串表示形式)转换为特定类型的对象吗?
| 归档时间: |
|
| 查看次数: |
5728 次 |
| 最近记录: |