我可以使用通用隐式或显式运算符吗? C#

时间:2010-05-31 05:25:54

标签: c# .net generics

如何更改以下语句,使其接受任何类型而不是长?现在这里是捕获,如果没有构造函数我不想编译。所以,如果有一个字符串的构造函数,long和double但没有bool我怎么能让这一行适用于所有这些支持类型呢?

ATM我只是复制粘贴它,但我不想这样做,如果我有20种(任务可能是微不足道的)

public static explicit operator MyClass(long v) { return new MyClass(v); }

3 个答案:

答案 0 :(得分:2)

也许它有效:

public static explicit operator MyClass<T>(T t) where T:new()
{ 
  return new MyClass(t);
}

修改

我刚刚检查了你的请求,发现很奇怪。 “所以如果有一个字符串的构造函数,long和double但没有bool” 你能告诉我你为什么要这样做。

修改

我试过我的机器,似乎泛型类型不能用于显式方法。也许我们只能回到对象参数?

答案 1 :(得分:2)

现在我可以告诉你,问题的答案是“不,我们不能”因为:

  

用户定义的转换必须转换为封闭类型或来自封闭类型。

这就是为什么我们不能在这里使用泛型类型。

public class Order
{
    public string Vender { get; set; }
    public decimal Amount { get; set; }
}

public class AnotherOrder
{
    public string Vender { get; set; }
    public decimal Amount { get; set; }
    public static explicit operator AnotherOrder(Order o)
    {
        //this method can be put in Order or AnotherOrder only
    }
}

答案 2 :(得分:0)

如果我没弄错的话,请使用对象类型。

public static explicit operator MyClass(object v) { return new MyClass(v); }