这就是我的意思:
我需要能够替换这个丑陋的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#中进行.
我需要一个辅助方法来将轴标签添加到图表中.我不想在图表中具有值的轴的每个点添加标签,因为这会太忙.所以我需要定期提取样品.到目前为止,我已经提出了满足要求的以下方法,但我认为必须有一种更简洁的方法来实现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) 我已经看了http://slodge.blogspot.co.uk/2013/06/ioc-and-servicelocation-in-v3-brain-dump.html这篇关于"v3中的IoC和ServiceLocation"的文章.
一切都很清楚.但是,这个逻辑性能是什么?通常反射被用于这种类型的东西(我假设MvvmCross也这样做).每个人(至少,或多或少经验丰富的开发人员)都知道反思是表演的"邪恶".
所以,据我所知,该框架遍历应用程序中的所有类(可能只是Core assemply)并找到需要注入的类等,对吧?我确信这在小项目中是可以的,对于像web这样的项目(长时间启动)也是不够的,但是有什么关于移动应用程序(通常具有更有限的处理器能力和启动时间对用户来说至关重要) ?你对此有什么想法吗?您如何评估" 开发的便利性 "和" 第一次降低性能 " 之间的关系?
谢谢.
我有一个类,它具有许多我正在实现的属性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)
当我在对象上有数百个属性时,我该怎么回事?
我有一些示例代码如下:
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?非常感谢任何帮助或意见,谢谢
我的实体框架上下文:
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# ×6
algorithm ×1
hashcode ×1
linq ×1
mobile ×1
mvvmcross ×1
ref ×1
refactoring ×1
reflection ×1
xamarin ×1