相关疑难解决方法(0)

在C#中是否可以使用在运行时生成的字段名来访问对象的字段

这就是我的意思:

我需要能够替换这个丑陋的C#代码:

if (attribute.Name == "Name") machinePool.Name = attribute.Value;
else if (attribute.Name == "Capabilities") machinePool.Capabilities = attribute.Value;
else if (attribute.Name == "FillFactor") machinePool.FillFactor = attribute.Value;
Run Code Online (Sandbox Code Playgroud)

进入这样的事情:

machinePool.ConvertStringToObjectField(attribute.Name) = attribute.Value;
Run Code Online (Sandbox Code Playgroud)

没有ConvertStringToObjectField()方法,但我希望有这样的东西,如果可能的话.我可以访问machinePool对象类代码,所以我可以添加必要的代码,但我不确定它可能是什么代码,或者甚至可以在C#中进行.

c# refactoring ref

4
推荐指数
1
解决办法
2408
查看次数

使用linq对列表进行采样

我需要一个辅助方法来将轴标签添加到图表中.我不想在图表中具有值的轴的每个点添加标签,因为这会太忙.所以我需要定期提取样品.到目前为止,我已经提出了满足要求的以下方法,但我认为必须有一种更简洁的方法来实现Linq.任何人都可以想到如何使这更简洁(n代表我想要的样本总数)?

public static List<T> Sample<T>(this List<T> list, int n)
{
  var samples = new List<T>();
  var divisor = list.Count/n;
  for (var i = 0; i < list.Count; i++)
    if (samples.Count == i/divisor)
      samples.Add(list[i]);
  return samples;
}
Run Code Online (Sandbox Code Playgroud)

c# linq algorithm

4
推荐指数
1
解决办法
1695
查看次数

MvvmCross:IoC和ServiceLocation性能

我已经看了http://slodge.blogspot.co.uk/2013/06/ioc-and-servicelocation-in-v3-brain-dump.html这篇关于"v3中的IoC和ServiceLocation"的文章.

一切都很清楚.但是,这个逻辑性能是什么?通常反射被用于这种类型的东西(我假设MvvmCross也这样做).每个人(至少,或多或少经验丰富的开发人员)都知道反思是表演的"邪恶".

所以,据我所知,该框架遍历应用程序中的所有类(可能只是Core assemply)并找到需要注入的类等,对吧?我确信这在小项目中是可以的,对于像web这样的项目(长时间启动)也是不够的,但是有什么关于移动应用程序(通常具有更有限的处理器能力和启动时间对用户来说至关重要) ?你对此有什么想法吗?您如何评估" 开发的便利性 "和" 第一次降低性能 " 之间的关系?

谢谢.

c# mobile mvvmcross xamarin

4
推荐指数
1
解决办法
1185
查看次数

对具有大量属性的类实现GetHashCode()的最佳方法是什么?

我有一个类,它具有许多我正在实现的属性IEquitable<T>.我找到了关于如何为少量属性执行GetHashCode()的多个示例.

这是一个例子

public override int GetHashCode()
{
    unchecked // Overflow is fine, just wrap
    {
        int hash = 17;
        // Suitable nullity checks etc, of course :)
        hash = hash * 23 + field1.GetHashCode();
        hash = hash * 23 + field2.GetHashCode();
        hash = hash * 23 + field3.GetHashCode();
        return hash;
    }
}
Run Code Online (Sandbox Code Playgroud)

当我在对象上有数百个属性时,我该怎么回事?

c# hashcode

4
推荐指数
3
解决办法
7203
查看次数

如何遍历匿名对象列表?

我有一些示例代码如下:

var items = new List<object>();

var testObjectOne = new
{
    Valueone = "test1",
    ValueTwo = "test2",
    ValueThree = "test3"
};
var testObjectTwo = new
{
    Valueone = "test1",
    ValueTwo = "test2",
    ValueThree = "test3"
};
items.Add(testObjectOne);
items.Add(testObjectTwo);

foreach (var obj in items)
{
    var val = obj.Valueone;
}
Run Code Online (Sandbox Code Playgroud)

但我无法访问Valueone并得到错误:object'不包含'Valueone'的定义,并且没有扩展方法'Valueone'接受类型'object'的第一个参数可以找到(你是否缺少using指令或装配参考?)

问题:如何迭代此列表并访问ValueOne?非常感谢任何帮助或意见,谢谢

c#

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

无法将类型为'System.Data.Entity.DbSet`1 [ModelName]'的对象转换为类型为'System.Data.Entity.DbSet'

我的实体框架上下文:

public class MyContext : DbContext
{
    public DbSet<Company> Companies { get; set; }
    public DbSet<Contact> Contacts { get; set; }
    public DbSet<Event> Events { get; set; }        
}
Run Code Online (Sandbox Code Playgroud)

我添加对象的方法:

public void AddObject(DbContext context, Type t, object object_to_add)
{      
     PropertyInfo context_property = 
            context.GetType().GetProperties()
           .Where(p => typeof(IEnumerable).IsAssignableFrom(p.PropertyType)
                       && p.PropertyType.GenericTypeArguments.Any()
                       && p.PropertyType.GenericTypeArguments.First() == t)
           .Single();

     DbSet db_set = (DbSet)context_property.GetMethod.Invoke(context, null);

     db_set.Add(object_to_add);
}
Run Code Online (Sandbox Code Playgroud)

但是,代码崩溃当我尝试投了DbSet<>DbSet

我使用反射是因为我收到映射到现有模型的DTO对象(也通过反射),我不想为每个新模型编写add方法(我喜欢40,并且列表呈指数增长)

块引用

有什么办法吗?

c# reflection entity-framework

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