C# 泛型转换

C# 泛型转换,c#,generics,delegates,C#,Generics,Delegates,目标: 我打算设计一个可以访问任何数值(int、double、byte…)的实用程序 并生成正方形 我做了什么: delegate void t<T> (T somevalues); class program { static void Main() { Console.ReadKey(true); } } class Utility { public static void Activit

目标:

我打算设计一个可以访问任何数值(int、double、byte…)的实用程序 并生成正方形

我做了什么:

 delegate  void t<T> (T somevalues);
 class program
  {
      static void Main()
      {
          Console.ReadKey(true);
      }
  }

  class Utility
  {
      public static void Activities<T>(T[] SomeValues,t<T> transformer)
      {
         var qry = SomeValues.Select(p => transformer(p));  
      }

      public static T Squaring<T>(T vals)
      {
        return vals * vals;
      }
  }
委托无效t(t值);
班级计划
{
静态void Main()
{
Console.ReadKey(true);
}
}
类效用
{
公共静态无效活动(T[]值,T转换器)
{
var qry=SomeValues.Select(p=>transformer(p));
}
公共静态T平方(T VAL)
{
返回VAL*VAL;
}
}
错误:

 delegate  void t<T> (T somevalues);
 class program
  {
      static void Main()
      {
          Console.ReadKey(true);
      }
  }

  class Utility
  {
      public static void Activities<T>(T[] SomeValues,t<T> transformer)
      {
         var qry = SomeValues.Select(p => transformer(p));  
      }

      public static T Squaring<T>(T vals)
      {
        return vals * vals;
      }
  }
  • 尝试指定显式类型参数(在LINQ查询中)

  • 运算符“*”不能应用于类型为“T”和“T”(在平方()中)的操作数


  • 如何派生约束或更改可以访问任何数字(int、double、byte、…)并生成正方形的代码。

    与Java不同。NET没有像
    Number那样的通用接口,用于所有数字类型(有关于为什么的提示)。但看看这个问题,似乎有一种方法。至少在.NET 3.5中是这样。

    与Java不同。对于所有数字类型,NET没有像
    Number
    这样的通用接口(有关于原因的提示)。但看看这个问题,似乎有一种方法。至少在.NET3.5中是这样。

    你不能。这是对.Net中泛型的常见抱怨。目前还并没有办法声明一个类型约束,将一个类型限定为“数值”值类型的子集。如果你真的想沿着这条路走下去,唯一的选择就是创建你自己的值类型,这些值类型是核心CTS数值类型的包装,并让每个值类型实现一个空的
    IAmNumber
    接口。然后您可以让泛型方法在该接口上声明类型约束。。。但这种方法强制您在任何需要此功能的地方使用自定义数字类型,而不是内置类型

    你不能。这是对.Net中泛型的常见抱怨。目前还并没有办法声明一个类型约束,将一个类型限定为“数值”值类型的子集。如果你真的想沿着这条路走下去,唯一的选择就是创建你自己的值类型,这些值类型是核心CTS数值类型的包装,并让每个值类型实现一个空的
    IAmNumber
    接口。然后您可以让泛型方法在该接口上声明类型约束。。。但这种方法强制您在任何需要此功能的地方使用自定义数字类型,而不是内置类型

    运算符被定义为类型的静态函数。在任何泛型类型中都无法访问静态函数。

    运算符被定义为类型的静态函数。静态函数在任何泛型类型中都不可访问