能将赋值作为参数传递的函数定义是什么

时间:2019-06-29 12:41:48

标签: c# lambda expression

我正在重构一些旧代码。现在我面临的问题之一是

 AllFields.Add(SomeProperty = new IntField
            {
                ColumnName = "SomeProperty",
                DisplayName = "Some Property",
                IsEditable = false,
                IsRequired = true
            });

现在我想要的是某种类似于扩展方法的东西,该方法需要分配 SomeProperty = new IntField()作为参数

e..g

public static class Extensions  
{  
  public static void Add(this IList<IField> source, SomeParameter value)  
  {  
  }  
}  

我可以做

IList<IField> AllFields = new List<IField>();  
AllFields.Add(SomeProperty = new IntField(){});
AllFields.Add(SomeProperty2 = new DecimalField(){});

我忘了加。 SomeProperty和SomeProperty的类型为int和小数

1 个答案:

答案 0 :(得分:0)

您可以为此使用泛型。像下面这样的东西就足够了:

public static class Extensions  
{  
    public static void Add<T>(this IList<T> source, SomeParameter value) 
        where T : IField, new()  
    {  
    }  
} 

本质上,您定义了一个通用方法,该通用方法的唯一通用参数T应该具有无参数构造函数(where T : new())并实现接口IField

这样做,您可以编写如下内容:

IList<IField> AllFields = new List<IField>();  
AllFields.Add(new IntField(){});
AllFields.Add(new DecimalField(){});

您也可能会遇到类似以下的内容:

IField SomeProperty;
IField SomeProperty2;

IList<IField> AllFields = new List<IField>();  
AllFields.Add(SomeProperty = new IntField(){});
AllFields.Add(SomeProperty2 = new DecimalField(){});

但是,从您描述的目的来看,我没有看到此用法。