Tag: 初始化程序

C#如何使用reflection调用字段初始值设定项?

说我有这个C#类 public class MyClass { int a; int[] b = new int[6]; } 现在说我发现这个类使用reflection,在查看字段时,我发现其中一个是Array类型(即:b) foreach( FieldInfo fieldinfo in classType.GetFields() ) { if( fieldInfo.FieldType.IsArray ) { int arraySize = ?; … } } 我知道不能保证数组有一个创建数组的字段初始值设定项,但如果确实如此,我想知道字段初始值设定项创建的数组的大小。 有没有办法调用字段初始化程序? 如果有,我会做这样的事情: Array initValue = call field initializer() as Array; int arraySize = initValue.Length; 我发现唯一的是创建一个全class的实例,但我宁愿不这样做,因为它太过分了……

属性初始化不会为List 调用set

我在检查类属性的代码覆盖时发现了一个场景。 当属性是List 类型,并且使用初始化程序时,似乎不会调用set方法。 对于其他类型,例如字符串和整数,情况并非如此。 代码覆盖率不显示set调用,set中的断点也不会被触发。 示例类: public class ContainerClass { public string Text { get; set; } public List Items { get; set; } } 当使用初始化程序时,如下所示,调用Text上的set方法,并在代码覆盖率中注册,但是Items上的set方法没有,我想知道为什么: var arrange = new ContainerClass { Text = “value”, Items = { new Item() } }; 编辑:我会指出列表已正确分配,可以进行测试,但它似乎绕过实际的set方法。 有趣的是,当我指定新列表时,它会被调用: var arrange = new ContainerClass { Items = new List { […]

如何在使用对象初始化程序时正确使用断点?

例如,做这样的事情: foreach (DataRow row in data.Rows) { Person newPerson = new Person() { Id = row.Field(“Id”), Name = row.Field(“Name”), LastName = row.Field(“LastName”), DateOfBirth = row.Field(“DateOfBirth”) }; people.Add(newPerson); } 无法将断点设置为单个分配,断点将设置为整个块。 如果我想具体查看代码中断的地方,我必须使用: foreach (DataRow row in data.Rows) { Person newPerson = new Person(); newPerson.Id = row.Field(“Id”); newPerson.Name = row.Field(“Name”); newPerson.LastName = row.Field(“LastName”); newPerson.DateOfBirth = row.Field(“DateOfBirth”); people.Add(newPerson); } […]

为什么初始化程序不能使用返回list 的属性?

找不到这个问题的答案。 它必须是显而易见的,但仍然是。 我尝试在这个简化的例子中使用初始化器: MyNode newNode = new MyNode { NodeName = “newNode”, Children.Add(/*smth*/) // mistake is here }; 其中Children是此类的属性,它返回一个列表。 在这里,我遇到了一个错误,就像’无效的初始化成员声明符’。 这里有什么问题,你如何初始化这些属性? 非常感谢提前!

C#初始化条件赋值

在ac#initialiser中,如果条件为false,我想不设置属性。 像这样的东西: ServerConnection serverConnection = new ServerConnection() { ServerInstance = server, LoginSecure = windowsAuthentication, if (!windowsAuthentication) { Login = user, Password = password } }; 可以办到? 怎么样?

是否可以使用工厂方法使用ac#object initializer?

我有一个带有静态工厂方法的类。 我想调用工厂来检索类的实例,然后通过c#object initializer语法进行额外的初始化: MyClass instance = MyClass.FactoryCreate() { someProperty = someValue; } VS MyClass instance = MyClass.FactoryCreate(); instance.someProperty = someValue;

如何创建初始化程序来创建和迁移mysql数据库?

我一直在学习如何使用EF一个星期左右,并且我一直坚持创建/更新我的数据库的问题。 如果不存在,我可以创建一个初始化器来创建数据库: static class Program { static void Main() { Database.SetInitializer(new GumpDatabaseInitializer()); …. class GumpDatabaseInitializer : CreateDatabaseIfNotExists { public GumpDatabaseInitializer() { } protected override void Seed(GumpDatabase context) { context.Database.ExecuteSqlCommand(“CREATE UNIQUE INDEX Name ON Stations (Name)”); // Other stuff } } 或者我可以创建配置来迁移数据库 static class Program { static void Main() { Database.SetInitializer(new MigrateDatabaseToLatestVersion()); …. internal sealed class […]