相关疑难解决方法(0)

C#按原始顺序获取FieldInfos/PropertyInfos?

如何将类型FieldInfos/PropertyInfos作为MemberInfo数组按照它们在类中布局的顺序获取?

class Test
{
    public bool First { get; set; }
    public int Second;
    public string Third { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

c#

27
推荐指数
1
解决办法
5577
查看次数

4.5"中的CallerMemberName属性是否能够伪造"?

所以.NET 4.5引入了CallerMemberNameAttribute,对于任何使用WPF并实现的人来说,这似乎是天赐之物INotifyPropertyChanged- 我的问题是:4.5 5.0编译器本质上是否绑定/支持该属性,还是更多的环境语法糖助手,就像人们可以通过声明ExtensionAttribute自己的神奇,打开LINQ语法来伪造Visual Studio一样?

编辑:(对不起Jon!)我想我是否可以CallerMemberNameAttribute通过在适当的命名空间中重新声明属性来"启用" .NET 4.0中的功能,就像在.NET中"启用"LINQ查询语法一样2.0通过适当的ExtensionAttribute类声明.我强烈的怀疑是不,自然......

换句话说:我想知道如果CallerMemberName不升级到.NET 4.5/5,我是否可以从中受益

希望这更清楚......

NinjaEdit#2:叹息......版本编号惯例令人困惑!

.net wpf .net-4.5

26
推荐指数
1
解决办法
1万
查看次数

`Type.GetProperties`属性顺序

精简版

Type.GetProperties它返回的集合的状态的MSDN文档不保证按字母顺序或声明顺序,但运行一个简单的测试表明,它通常以声明顺序返回.您是否知道具体情况不是这种情况?除此之外,建议的替代方案是什么?

详细版本

我意识到Type.GetProperties状态的MSDN文档:

GetProperties方法不以特定顺序返回属性,例如按字母顺序或声明顺序.您的代码不得依赖于返回属性的顺序,因为该顺序会有所不同.

因此无法保证方法返回的集合将以任何特定方式进行排序.根据一些测试,我发现相反的返回属性按照它们在类型中定义的顺序出现.

例:

class Simple
{
    public int FieldB { get; set; }
    public string FieldA { get; set; }
    public byte FieldC { get; set; }
}
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Simple Properties:");
        foreach (var propInfo in typeof(Simple).GetProperties())
            Console.WriteLine("\t{0}", propInfo.Name);
    }
}
Run Code Online (Sandbox Code Playgroud)

输出:

Simple Properties:
        FieldB
        FieldA
        FieldC
Run Code Online (Sandbox Code Playgroud)

一个这样的情况,这只是略有不同的是当有问题的类型的父母也有属性时:

class Parent
{
    public int ParentFieldB { get; set; }
    public string ParentFieldA { get; set; }
    public byte …
Run Code Online (Sandbox Code Playgroud)

c# reflection

23
推荐指数
4
解决办法
9257
查看次数

按声明顺序对枚举进行排序

public enum CurrencyId
{
    USD = 840,
    UAH = 980,
    RUR = 643,
    EUR = 978,
    KZT = 398,
    UNSUPPORTED = 0
}
Run Code Online (Sandbox Code Playgroud)

有没有办法Enum.GetValues(typeof(CurrencyId)).Cast<CurrencyId>()按顺序对结果进行排序?它们是在.cs文件(USD,UAH,RUR,EUR,KZT,UNSUPPORTED)中声明的,而不是它们的底层代码?就个人而言,我认为答案是'不',因为原始订单在二进制文件中丢失,所以...我该如何实现任务?

c# enums

9
推荐指数
2
解决办法
1万
查看次数

C#,如何简单地改变班级成员的顺序

嗨,我有一个派生自另一个班级的班级.像这样 :

public  class Customer
  {
    public string Date{ get; set; }
    public string InstallationNo{ get; set; }
    public string SerialNo { get; set; }        
  } 
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个名为Customer_U的类,该类派生自Customer

 public  class Customer_U:Customer
  {
    public string Bill{ get; set; }            
  }  
Run Code Online (Sandbox Code Playgroud)

我有一个简单的问题.我有很多时间谷歌,但没有答案.我的列表中填充了以下数据:

List<Customer_U> customer= new List<Customer_U>() 我使用此列表创建一个Excel.在excel colum顺序是这样的:

比尔---日期--- InstalltionNo --- SerialNo.

我想要这个订单.我希望"比尔"成员成为最后一栏.如何在从另一个类派生的类中创建成员的顺序

.net c# class

4
推荐指数
1
解决办法
1324
查看次数

使用反射按顺序获取类的属性

请参考此代码

public class A : B
{
     [Display(Name = "Initial Score Code", Order =3)]
     public Code { get; set; }

     [Display(Name = "Initial Score Code", Order =2)]
     public Name{ get; set; }
............

}
Run Code Online (Sandbox Code Playgroud)

我需要通过order的orderAttribute按顺序获取类的所有属性.我试过这个代码

 var prop = typeof(A)
            .GetProperties()
            .OrderBy(p => ((DisplayAttribute)p.GetCustomAttributes(typeof(DisplayAttribute),  true).FirstOrDefault).Order);
Run Code Online (Sandbox Code Playgroud)

但它会导致错误

对象引用不设置对象的实例

我假设这个问题是因为某些属性在"DisplayAttribute"中没有"Order"属性.

如何处理这种情况?我需要订购所有属性,即使某些属性没有order属性的值.

c# linq reflection c#-4.0

3
推荐指数
1
解决办法
2912
查看次数

标签 统计

c# ×5

.net ×2

reflection ×2

.net-4.5 ×1

c#-4.0 ×1

class ×1

enums ×1

linq ×1

wpf ×1