Tag: 属性

通过反映COM对象获取属性名称

如何通过在C#中反映COM对象来读出所有属性名称? 如果我知道名字,我知道如何获得财产。 comObject.GetType().InvokeMember(“PropertyName”, System.Reflection.BindingFlags.GetProperty, null, comObject, null); 但什么时候我想转储所有属性? PropertyInfo[] properties = t.GetProperties(); 这种方式不适用于Com-Objects。 如果我做一个GetMembers()我得到这些成员: Name: GetLifetimeService Name: InitializeLifetimeService Name: CreateObjRef Name: ToString Name: Equals Name: GetHashCode Name: GetType 对克里斯说

C#方法属性不能包含Lambda表达式?

IntelliSense告诉我“Expression不能包含匿名方法或lambda表达式”。 真? 我不知道这个强加的限制。 它是否正确? 我想我正在寻找一个健全检查…… public delegate bool Bar(string s); [AttributeUsage(AttributeTargets.All)] public class Foo : Attribute { public readonly Bar bar; public Foo(Bar bar) { this.bar = bar; } } public class Usage { [Foo(b => b == “Hello World!”)] // IntelliSense Complains here public Usage() { } }

C#reflection和获取属性

我有以下虚拟类结构,我试图找出如何从PeopleList中的类People的每个实例获取属性。 我知道如何从People的单个实例中获取属性但是在我的生活中无法知道如何从PeopleList获取它。 我确信这真的很简单,但是有人能指出我正确的方向吗? public class Example { public class People { private string _name; public string Name { get { return _name; } set { _name = value; } } private int _age; public int Age { get { return _age; } set { _age = value; } } public People() { } public People(string […]

C#在setter方法上添加validation

我有一些我在C#中定义的变量: public String firstName { get; set; } public String lastName { get; set; } public String organization { get; set; } 我想要的是在您尝试设置值时为这些方法添加validation。 让我们说你要为firstName设置一个值,我应该通过thrue regexp来设置,否则应该抛出exception。 是否可以使用这种“短语法”构建,或者我应该选择标准(如JAVA)getter和setter并在那里validation数据?

如何在调试时避免触发属性?

有没有办法在调试时看到变量时阻止触发属性getter代码? DebuggerStepThrough属性风格的东西?

轻松创建支持C#索引的属性

在C#中,我发现索引属性非常有用。 例如: var myObj = new MyClass(); myObj[42] = “hello”; Console.WriteLine(myObj[42]); 但据我所知,没有语法糖来支持自己支持索引的字段(如果我错了请纠正我)。 例如: var myObj = new MyClass(); myObj.field[42] = “hello”; Console.WriteLine(myObj.field[42]); 我需要这个的原因是我已经在我的类上使用索引属性,但我有GetNumX() , GetX()和SetX()函数如下: public int NumTargetSlots { get { return _Maker.NumRefs; } } public ReferenceTarget GetTarget(int n) { return ReferenceTarget.Create(_Maker.GetReference(n)); } public void SetTarget(int n, ReferenceTarget rt) { _Maker.ReplaceReference(n, rt._Target, true); } 你可能会看到将这些暴露为一个可索引的字段属性会更有意义。 […]

整个解决方案的常见Settings.settings文件

有没有办法为解决方案的所有项目提供公共属性文件? 我有一个控制台应用程序和一堆其他类库文件,我想只有一个设置文件。 我不是在谈论app.Config文件。 我在谈论Settings.settings文件。 知道我怎么做吗? 将配置设置存储在设置文件而不是app.config中也是一个好习惯吗?

如何设置没有setter的属性值

我已经看到了各种问题并回答了我们可以使用这样的reflection来调用私有的setter: 是否有可能通过反思得到一个房产的私人制定者? 但是我有一些代码有一个我需要设置的属性但不能因为没有setter,我不能添加一个setter,因为这不是我的代码。 在这种情况下,有没有办法以某种方式使用reflection设置值?

如何使在简单的测试用例中隐藏调试器的exception?

建立: 1)MSVS 2015,选项 – >调试器 – >“仅我的代码”被选中。 2)此示例代码放在某个类中并在启动期间调用: static bool TestIgnoreException() { Exception ex; return TrySomething(out ex); } [DebuggerNonUserCode] // Prevent exceptions from stopping the debugger within this method. static bool TrySomething(out Exception exOut) { try { if (Environment. MachineName.Length != -1) throw new Exception(“ThrewIt.”); exOut = null; return true; } catch (Exception ex) { […]

在哪些情况下,将字段更改为属性是一个重大变化?

在阅读Jon Skeet关于字段与属性的文章时,他提到将字段更改为属性是一个重大变化。 我想了解这种变化可能导致中断的常见情况。 除了方案,如果可以,请提供任何详细信息。 首先,其他地方提到了以下几点: 如果在类上使用reflection,则无法将字段更改为属性。 即使我没有细节,这也很明显。 序列化是一种情况,其中reflection用于迭代对象,将字段更改为属性将破坏序列化程序或更改输出 您无法轻松绑定字段。 (这是为什么?我在这里阅读) ??? 编辑:罗伯特有一个全面的列表,列出了在字段上选择属性的原因,并解释了它们之间的切换如何导致突破性变化。