2015-11-26 37 views
1

我有三个属性的以下类。如何根据c#中的条件显示和隐藏属性值和值#

public class Item 
{ 
    public float a { get; set; } 
    public float b { get; set; } 
    public float c { get; set; } 
} 

下面是我需要返回类型的Item不应该包含默认值或空值的方法。我怎样才能做到这一点。

class Program 
{ 
    static void Main(string[] args) 
    { 
     List<Item> callingprogram = CallIngprogram1(); 

     callingprogram2(callingprogram); 
    } 

    private static List<Item> callingprogram2(List<Item> paramss) 
    { 
    if (paramss[0].c == 0.0) 
     { 
     // return the list which should not contain the property C. IF the value is null or default value that property value should not return 
     } 
     return null; 
    } 

    private static List<Item> CallIngprogram1() 
    { 
     List<Item> list = new List<Item>(); 
     list.Add(new Item 
     { 
      a = 1, 
      b = 3 
      // c value is not assign so it contain the default value 
     }); 
     return list; 
    } 

} 

假设我给所有三个属性赋值,所有三个属性应该返回。如果我没有给任何属性名称赋值以及值不应该返回。

+2

你的问题就没有意义了。默认值与为属性显式赋值'0.0'没有什么不同。 –

+0

我的担心是如果我为a和b属性赋值,返回类型应该只包含a和b参数。因为它有默认值,所以在返回值中不需要c。 –

回答

1

c#中float的默认值是0.您可以将这个逻辑放在您的callingprogram2()中。如果所有的值赋给它会返回A,B,C,如果c未分配,则将返回A,B:

编辑:

private static List<dynamic> callingprogram2(List<Item> paramss) 
    { 
     dynamic newList = new List<dynamic>(); 
     foreach (var item in paramss) 
     { 
      dynamic dObject = new ExpandoObject(); 
      dObject.a = item.a; 
      dObject.b = item.b; 
      if (item.c != 0.0) 
      { 
       dObject.c = item.c; 
      } 
      newList.Add(dObject); 
     } 

     return newList; 
    } 
+0

我的担心是如果我给a和b属性赋值,返回类型应该只包含a和b参数。因为它有默认值,所以我不需要返回值中的c以及列表中的键。我不需要空返回值。 –

+0

@San Jaisy在c#中,由于元数据在程序集中是固定的,因此无法在运行时删除属性。如果你需要创建动态属性,那么你应该使用ExpandoObject –

+0

你能告诉我如何通过Expandobject达到这个效果 –

0

在定义一个类之前,它的任何实例都将包含所有的属性。问题是你如何使用这个实例。可能是你需要改变使用实例的逻辑。

+0

我没有明白你的观点。请你能详细说明样品。但我担心的是,如果我为a和b属性赋值,则返回类型只应包含a和b参数。我不需要c的返回值,因为它具有默认值 –

+0

@ San Jaisy如果我理解你的问题,在你的例子中你想返回一个不包含属性C的Item。在你返回一个类Item的实例将包含此类中定义的所有属性。所以你可以做的就是像上面的例子那样返回动态对象。 –

相关问题