相关疑难解决方法(0)

nameof()是在编译时评估的吗?

在C#6中,您可以使用nameof()运算符来获取包含变量名称或类型的字符串.

这是在编译时评估,还是在运行时通过一些Roslyn API评估?

c# roslyn c#-6.0

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

比较c#中的对象属性

这就是我在许多其他类继承的类中作为方法提出的.这个想法是它允许在相同类型的对象的属性之间进行简单比较.

现在,这确实有效 - 但为了提高我的代码质量,我想我会把它扔出去仔细检查.它怎么能更好/更有效/等等?

/// <summary>
/// Compare property values (as strings)
/// </summary>
/// <param name="obj"></param>
/// <returns></returns>
public bool PropertiesEqual(object comparisonObject)
{

    Type sourceType = this.GetType();
    Type destinationType = comparisonObject.GetType();

    if (sourceType == destinationType)
    {
        PropertyInfo[] sourceProperties = sourceType.GetProperties();
        foreach (PropertyInfo pi in sourceProperties)
        {
            if ((sourceType.GetProperty(pi.Name).GetValue(this, null) == null && destinationType.GetProperty(pi.Name).GetValue(comparisonObject, null) == null))
            {
                // if both are null, don't try to compare  (throws exception)
            }
            else if (!(sourceType.GetProperty(pi.Name).GetValue(this, null).ToString() == destinationType.GetProperty(pi.Name).GetValue(comparisonObject, null).ToString()))
            {
                // only …
Run Code Online (Sandbox Code Playgroud)

c# comparison properties object

111
推荐指数
5
解决办法
15万
查看次数

属性选择器Expression <Func <T >>.如何获取/设置所选属性的值

我有一个对象,我想以这种方式构造:

var foo = new FancyObject(customer, c=>c.Email); //customer has Email property
Run Code Online (Sandbox Code Playgroud)

我该如何申报第二个参数?

访问所选属性setter/getter的代码如何?

UPD.模型中有多个实体具有Email属性.所以签名可能看起来像:

public FancyObject(Entity holder, Expression<Func<T>> selector)
Run Code Online (Sandbox Code Playgroud)

和构造函数调用

var foo = new FancyObject(customer, ()=>customer.Email);
Run Code Online (Sandbox Code Playgroud)

c#

64
推荐指数
2
解决办法
5万
查看次数

如何在C#.NET中深层复制不同类型的对象

我需要按字段名称映射ObjectV1和ObjectV2之间的所有字段值和子集合.ObjectV2与ObjectV1位于不同的namspace中.

模板ClassV1和ClassV2之间的继承已被打折扣,因为这两个类需要独立发展.我已经考虑过使用反射(慢速)和二进制序列化(也很慢)来执行公共属性的映射.

有首选方法吗?还有其他选择吗?

.net c# reflection serialization

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

正确地实现两个具有不同类型但在语义上等效的对象的比较

我发现了类似的问题

如何比较具有相似属性的两个截然不同的对象

这可能含蓄地和/或部分地回答了我的问题.

假设我想要比较(没有很多嵌套条件)这个对象:

class ObjectA {
  public string PropertyX { get; set; }
  public char PropertyY { get; set; }
  public long PropertyZ { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

到了System.String.我只对平等不平等感兴趣(不是关于身份的一系列价值观).

实施IEquatable<string>ObjectA是一个正确的选择吗?我不关心什么只是简单的工作,我想确定这种情况的正确模式.

作为其他信息,请考虑ObjectA通常按顺序提供IEnumerable<ObjectA>.

我不需要知道是否"string" ==!= objectA实例; 不涉及排序.

编辑以澄清(和帮助)

对不起,写一个好问题有时很难......

假设我不能将其表示ObjectA为字符串以进行比较(违反封装不是一种选择).

  • 在上下文中,我要与之匹配PropertyY.

  • 在context-2中,我要将它与应用于PropertyY/ 的算法相匹配PropertyZ.

@Oliver解决方案在问题的最后再次帮助我(再次+1).我可以简单地定义一个自定义界面:

interface IContextConverter {
  string ToEquatableStringForContext1();
  string ToEquatableStringForContext2();  
}
Run Code Online (Sandbox Code Playgroud)

由于我也有一个 …

c# design-patterns design-principles

10
推荐指数
1
解决办法
6262
查看次数

如何映射两个不同对象的属性?

我想知道如何映射两个不同对象的字段并为其分配值.

Eample:

public class employee
{
    public int ID { get; set; }
    public string Name { get; set; }
}

public class manager
{
    public int MgrId { get; set; }
    public string MgrName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

现在我有一个List对象.我想将值分配给"manager"类.任何自动方式来做到这一点.我可以明确地做并为其分配值.但我的目标是非常巨大的问题.我也不想使用任何第三方工具.

注意:它不能为经理提供任何前缀.它可以是任何东西.(例如:mgrId可以像mgrCode)

c# oop object

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

如果两个对象具有相同的属性,那么一个值是否可以自动分配?

这是一个学术问题比什么都重要......我知道有更多实用的手段可以开发......

假设您有以下代码:

public MyObject1 AssignTest(MyObject1 obj1,MyObject2 obj2){

public MyObject1 AssignTest (MyObject1 obj1, MyObject2 obj2)
{
    //Code here for auto map
}
Run Code Online (Sandbox Code Playgroud)

MyObject1和MyObject2具有完全相同的可用属性.是否可以自动将MyObject1中指定的所有值分配给MyObject2?而不是通过声明性地分配值(即MyObject1.Property1 = MyObject2.Property1等)

c#

7
推荐指数
2
解决办法
6991
查看次数