代码之家  ›  专栏  ›  技术社区  ›  cllpse

在单个对象上实现linq的Cast<T>()

  •  1
  • cllpse  · 技术社区  · 14 年前

    您将如何实施 Cast<T>()

    以下是场景:

    public interface IFoo
    {
        String Message { get; set; }
    }
    
    public class Foo : IFoo
    {
        IFoo.Message { get; set; }
        internal SecretMessage { get; set; } // secrets are internal to the assembly
    }
    
    internal class Fubar
    {
        public IFoo Foo { get; set; }
    }
    

    我希望能够做到。。。

    fubarInstance.Foo.Cast<Foo>.SecretMessage = "";
    

    而不是。。。

    ((Foo)fubarInstance.Foo).SecretMessage = "";
    
    1 回复  |  直到 14 年前
        1
  •  6
  •   Jon Skeet    14 年前

    为什么?为什么不使用地球上每个C程序员都熟悉的强制转换语法呢?除非您能想到在方法中执行强制转换的非常明确的好处,否则请坚持使用内置机制。

    如果你 如果你想,你可以写:

    public static T Cast<T>(this object o) {
        return (T) o;
    }
    

    ... 但我强烈建议你不要这样做。