【问题标题】:Generic object inside class constructor [closed]类构造函数中的通用对象[关闭]
【发布时间】:2017-11-28 12:27:16
【问题描述】:

我有一个类构造函数。 有人可以解释第二个参数吗? Id 是一个函数,第一个参数是通用对象,第二个参数是可选的 GUID?

public myClass(int identifier, Func<T, Guid?> Id)

【问题讨论】:

  • 嗯,大概这是在一个泛型类中声明的,myClass&lt;T&gt;
  • Id是一个函数,它接受泛型对象并返回一个Nullable,即Guid或null值
  • 在提问之前你应该做一些研究。 msdn.microsoft.com/en-us/library/bb549151(v=vs.110).aspx
  • 它说“给我一个给定T(参数)的函数,可以返回Nullable&lt;Guid&gt;
  • 我总是想知道至少已经有 相当 数量的代表(如 700)的人仍然不知道 SO 是如何工作的,并且您应该首先自己做一些研究.如果你还不明白,怎么可能获得 700 声望……

标签: c# generics


【解决方案1】:

Id 是一个以通用对象作为第一个参数并以可选 GUID 作为第二个参数的函数吗?

不完全是。它是一个以通用对象作为第一个参数的函数(T 的类型在别处定义,可能在类定义中)返回一个可为空的GUID

【讨论】:

    【解决方案2】:

    .Net 不支持泛型构造函数,支持它没有意义,因为我们可以通过使用类级别的泛型来实现。 请看下面的代码,

     class Program
    {
        static void Main(string[] args)
        {
            var result = new GenericImplementation<int>(1, GetGuid);
            Console.WriteLine( result.Invoke(1));
            Console.ReadLine();
        }
    
        public static Guid? GetGuid(int i)
        {
            //Do whateve you want to do
            return new Guid();
        }
    
    }
    
    class GenericImplementation<T>
    {
        Func<T, Guid?> _id;
        public GenericImplementation(int identifier, Func<T,Guid?> id)
        {
            _id = id;
        }
    
        public Guid? Invoke(T value)
        {
            return _id.Invoke(value);
        }
    
        public bool Equal<U>(U v1, U v2)
        {
            if (v1.GetType() == typeof(string))
            {
                return v1.ToString() == v2.ToString();
            }
    
            if (v1.GetType() == typeof(int))
            {
                return int.Parse(v1.ToString()) == int.Parse(v2.ToString());
            }
    
            if (v1.GetType() == typeof(object))
            {
                //Deep level comparision
                return true;
            }
    
            return false;
        }
    }
    

    方法可以是通用的,因为它们可以根据参数(这是通用的)做出不同的反应,例如 equal 方法,Equal 方法的工作方式取决于提供的参数

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-20
      • 2013-08-26
      • 2021-11-11
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 2021-12-29
      相关资源
      最近更新 更多