如何在c#中引用适当的非泛型重载?
我应该写什么来代替???????选择合适的过载如何在c#中引用适当的非泛型重载?,c#,generics,overloading,C#,Generics,Overloading,我应该写什么来代替???????选择合适的过载 using System; using System.Collections.Generic; namespace ConsoleApplication2 { class A {} class B : A {} class C : A {} class Program { static void Main(string[] args) { var
using System;
using System.Collections.Generic;
namespace ConsoleApplication2
{
class A {}
class B : A {}
class C : A {}
class Program
{
static void Main(string[] args)
{
var l1 = new List<C>();
var l2 = new List<C>();
Comparer<C>(l1, l2, ???????);
}
void Compare(C a, C b) { }
void Compare(B a, B b) {}
void Compare<T>(IList<T> a, IList<T> b, Action<T,T> comparator)
{
for (int i = 0; i < a.Count; i++)
comparator(a[i], b[i]);
}
}
}
使用系统;
使用System.Collections.Generic;
命名空间控制台应用程序2
{
A类{}
B类:A{}
C类:A{}
班级计划
{
静态void Main(字符串[]参数)
{
var l1=新列表();
var l2=新列表();
比较器(l1,l2,l2);
}
空比较(cA,cB){}
无效比较(ba,bb){}
无效比较(IList a、IList b、动作比较器)
{
for(int i=0;i
这取决于您希望如何处理这些值。如果您只想传递一个委托,可以执行以下操作
Comparer<C>(l1,l2, (left,right) => {});
比较器(l1,l2,(左,右)=>{};
在这种情况下,零件实际上可以省略。编译器将能够推断参数
我很好奇您为名为comparer的参数选择了Action
。比较函数通常返回一个值,该值表示比较两个值的结果。操作
类型只返回void。很可能是这样
Func
,这是比较函数的更标准签名这取决于您希望如何处理这些值。如果您只想传递一个委托,可以执行以下操作
Comparer<C>(l1,l2, (left,right) => {});
比较器(l1,l2,(左,右)=>{};
在这种情况下,零件实际上可以省略。编译器将能够推断参数
我很好奇您为名为comparer的参数选择了Action
。比较函数通常返回一个值,该值表示比较两个值的结果。操作
类型只返回void。很可能是这样
Func
,这是比较函数的更标准签名您只需要将方法设置为静态并修复方法名称。您甚至可以在初始调用
Compare
时使用类型推断:
static void Main(string[] args)
{
var l1 = new List<C>();
var l2 = new List<C>();
Compare(l1, l2, Compare);
}
static void Compare(C a, C b) {}
static void Compare(B a, B b) {}
static void Compare<T>(IList<T> a, IList<T> b, Action<T,T> comparator)
{
for (int i = 0; i < a.Count; i++)
comparator(a[i], b[i]);
}
但是,我强烈建议在这种情况下,尽可能避免过载。为方法指定不同的名称-这将使其更易于阅读,并避免任何歧义。您只需将方法设置为静态并修复方法名称。您甚至可以在初始调用
Compare
时使用类型推断:
static void Main(string[] args)
{
var l1 = new List<C>();
var l2 = new List<C>();
Compare(l1, l2, Compare);
}
static void Compare(C a, C b) {}
static void Compare(B a, B b) {}
static void Compare<T>(IList<T> a, IList<T> b, Action<T,T> comparator)
{
for (int i = 0; i < a.Count; i++)
comparator(a[i], b[i]);
}
但是,我强烈建议在这种情况下,尽可能避免过载。给方法起一个不同的名字——这将使它更容易阅读,并避免任何歧义