相关疑难解决方法(0)

C#3.0+中属性和字段的区别

我意识到它似乎是C#中字段和属性之间有什么区别的重复但我的问题略有不同(从我的观点来看):

一旦我知道了

  • 我不会将我的课程用于"仅适用于属性的技术"和
  • 我不会在getter/setter中使用验证代码.

是否有任何区别(风格/未来发展除外),如设置属性时的某种控制类型?

是否有任何额外的区别:

public string MyString { get; set; }
Run Code Online (Sandbox Code Playgroud)

public string myString;
Run Code Online (Sandbox Code Playgroud)

(我知道,第一个版本需要C#3.0或更高版本,并且编译器会创建私有字段.)

c# field properties automatic-properties c#-3.0

138
推荐指数
6
解决办法
7万
查看次数

有没有办法通过字符串或索引访问Dapper FastExpando中的列?

我正在Dapper FastExpando引入一个对象,并希望能够在运行时而不是在设计/编译时动态引用列名.所以我希望能够做到以下几点:

var testdata = conn.Query("select * from Ride Where RiderNum = 21457");
Run Code Online (Sandbox Code Playgroud)

我希望能够做到以下几点:

foreach( var row in testdata) {
    var Value = row["PropertyA"];
}
Run Code Online (Sandbox Code Playgroud)

我明白我能做到:

var Value = row.PropertyA;
Run Code Online (Sandbox Code Playgroud)

但我不能这样做,因为我将需要的属性名称直到运行时才会知道.

这个SO问题的答案不起作用.我仍然得到同样的Target Invocation例外.所以...

有没有办法用Dapper FastExpando做我想做的事情?

c# dynamic dapper

23
推荐指数
1
解决办法
9861
查看次数

通过字符串在对象图中查找属性

我正在尝试使用任意 字符串访问嵌套类结构的各个部分.

鉴于以下(人为)课程:

public class Person
{
   public Address PersonsAddress { get; set; }
}

public class Adddress
{
   public PhoneNumber HousePhone { get; set; }
}

public class PhoneNumber
{
   public string Number { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我希望能够"PersonsAddress.HousePhone.Number"从对象的实例中获取Person对象.

目前我正在使用反射进行一些时髦的递归查找,但我希望有一些忍者有更好的想法.

作为参考,这是我开发的(蹩脚)方法:

private static object ObjectFromString(object basePoint, IEnumerable<string> pathToSearch)
{
   var numberOfPaths = pathToSearch.Count();

   if (numberOfPaths == 0)
     return null;

   var type = basePoint.GetType();
   var properties = type.GetProperties();

   var currentPath = pathToSearch.First();

   var propertyInfo = …
Run Code Online (Sandbox Code Playgroud)

c# reflection

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

可以访问属性的子"DebuggerDisplay"属性吗?

当前状态

有两个班:

[DebuggerDisplay(@"One = {One}, two = {Two}")]
public class A
{
    public int One { get; set; }
    public B Two { get; set; }
}

[DebuggerDisplay(@"Three = {Three}")]
public class B
{
    public int Three { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

使用它们:

var a = new A {One = 5, Two = new B {Three = 10}};
Run Code Online (Sandbox Code Playgroud)

内部调试器,也就是在显示工具提示值a

一个= 5,两个= {DebuggerDisplayTest.B}

目标

我想要的是类似的东西

一个= 5,两个='三= 10'

我知道这可以通过重写ToString()类的方法来实现B.这只是感觉不对,因为我在我的应用程序中编写代码仅用于调试.

我也知道使用类似的字符串

[DebuggerDisplay(@"One = {One}, two = …
Run Code Online (Sandbox Code Playgroud)

.net c# debugging visual-studio debuggerdisplay

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

C#使用动态属性创建对象:LINQ按属性名称数组选择List <object>值

class OriginalObject
        {
            public string str1  {get;set;}
            public string str2 { get; set; }
            public string str3 { get; set; }
            public string str4 { get; set; }

        }
        class Program
        {
            static void Main(string[] args)
            {           

                List<OriginalObject> obj = new List<OriginalObject>();
                obj.Add(new OriginalObject()
                {
                    str1 ="hi",
                    str2 = "hello",
                    str3 = "how",
                    str4 = "r u"
                });

                obj.Add(new OriginalObject()
                {
                    str1 = "i",
                    str2 = "am",
                    str3 = "fine",
                    str4 = "great"
                });

                var PropertyNames = new[] { "str1","str4"}; …
Run Code Online (Sandbox Code Playgroud)

c# linq

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