我意识到它似乎是C#中字段和属性之间有什么区别的重复?但我的问题略有不同(从我的观点来看):
一旦我知道了
是否有任何区别(风格/未来发展除外),如设置属性时的某种控制类型?
是否有任何额外的区别:
public string MyString { get; set; }
Run Code Online (Sandbox Code Playgroud)
和
public string myString;
Run Code Online (Sandbox Code Playgroud)
(我知道,第一个版本需要C#3.0或更高版本,并且编译器会创建私有字段.)
我正在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做我想做的事情?
我正在尝试使用任意 字符串访问嵌套类结构的各个部分.
鉴于以下(人为)课程:
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) 当前状态
有两个班:
[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) 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# ×5
.net ×1
c#-3.0 ×1
dapper ×1
debugging ×1
dynamic ×1
field ×1
linq ×1
properties ×1
reflection ×1