Tag: anonymous types

匿名类型到实际类重构

有没有一种简单的方法可以将匿名类型重构为类? 我经常使用匿名类型对我的代码进行原型设计,然后必须返回并重新实现各种类,因为它们需要在本地范围之外使用。 我正在使用resharper,并想知道是否有一个简单的方法来做到这一点。

使用ComboBox的SelectedItem属性w / Linq匿名类型

在C#3.5中使用ComboBox显示LinQ查询的结果。 当LinQ查询返回匿名类型时,如何设置combobox的selecteditem属性? 我沿着这些行设置了combobox的数据源: comboBox1.DataSource = from p in db.products select p; comboBox1.DisplayMember = “Name”; comboBox1.ValueMember = “ProductId”; 如果我这样做,我可以通过以下方式选择所选项目: comboBox1.SelectedItem = (from p in db.products where p.ProductId = 5 select p).First(); 问题是我想用匿名类型结果填充combobox,如: comboBox1.DataSource = from p in db.products select new { p.ProductId, p.Name }; 我实际使用的匿名类型比那更复杂,但它足以解释。

C#中的匿名类型

// x is compiled as an int var x = 10; // y is compiled as a string var y = “Hello”; // z is compiled as int[] var z = new[] { 0, 1, 2 }; 但 // ano is compiled as an anonymous type var ano = new { x1 = 10, y1 […]

将ExpandoObject强制转换为匿名类型

我可以将ExpandoObject强制转换为匿名类型吗? var anoObj = new { name = “testName”, email = “testEmail” }; dynamic expandoObj = new System.Dynamic.ExpandoObject(); // Here I’m populating the expandoObj with same property names/types in anonymoustype(anoObj) // Now, how to convert this ExpandoObject to anonymoustype ? var newObj = (typeof(anoObj)expandoObj); // This doesn’t work 稍后添加 //这是我的实体 public class Customer { #region […]

你能从.NET中的JSON实例化一个对象实例吗?

由于Object Initializers与JSON非常相似,现在.NET中有匿名类型。 能够获取字符串(例如JSON)并创建表示JSON字符串的匿名对象会很酷。 使用对象初始值设定项创建匿名类型: var person = new { FirstName = “Chris”, LastName = “Johnson” }; 如果您可以传入Object Initializer代码的字符串表示(最好是类似JSON)来创建具有该数据的匿名类型的实例,那将是非常棒的。 我不知道是否可能,因为C#不是动态的,并且编译器实际上将Object Initializer和Anonymous Type转换为可以运行的强类型代码。 本文将对此进行说明。 也许使用JSON并使用它创建键/值Dictionary的function将最有效。 我知道你可以在.NET中将一个对象序列化/反序列化为JSON,但我想要的是一种创建一个基本上松散类型的对象的方法,类似于JavaScript的工作方式。 有谁知道在.NET中这样做的最佳解决方案? 更新:太清楚我为什么要问这个问题的背景……我在考虑C#如何在语言层面(可能)更好地支持JSON,而我正试图想办法今天可以做到的概念原因。 所以,我想我会把它发布在这里开始讨论。

在MVC视图中迭代匿名类型数据

在某些视图数据中我放了一个匿名类型的结果: var projectData = from p in db.Projects orderby p.title select new { Title = p.title, DevURL = p.devURL ?? “N/A”, QAURL = p.qaURL ?? “N/A”, LiveURL = p.liveURL ?? “N/A”, Users = p.GetUsers().MakeUserList() }; ViewData[“ProjectSummary”] = projectData; 如何在前端的MVC视图中迭代这个视图数据来说,制作一个结果表?

是否可以使用变量/动态字段集在C#中声明匿名类型?

在C#中,我想弄清楚是否可以声明一个匿名类型,其中字段在运行时才知道。 例如,如果我有一个键/值对列表,我可以根据该列表的内容声明一个匿名类型吗? 我正在使用的具体情况是将参数传递给Dapper,我不知道我将提供多少参数。 List<Tuple> paramList = new List<Tuple>() { new Tuple(“key1”, “value1”), new Tuple(“key2”, “value2”) … }; 我想将此List(或等效的Map)转换为匿名类型,我可以将其作为查询参数传递给Dapper。 理想情况下,如果将以上列表定义为匿名类型,则上面的列表最终会显示如下: new { key1=value1, key2=value2, … } 我在StackOverflow上看到了几个问题,询问在声明它们之后扩展匿名类型(“extendo objects”),或者在创建对象后声明任意字段,但我不需要这样做……我只是需要一次性地动态声明类型。 我怀疑它是否需要一些花哨的反思,如果可能的话。 我的理解是编译器在编译时为引擎定义了一个匿名类的类型,所以如果该类的字段在运行时才可用,我可能会运气不好。 实际上,我的用例实际上与使用“extendo对象”来定义任意字段无关。 或者,如果有人知道将查询参数传递给Dapper的更好方法(而不是声明一个匿名类),我也很想知道这一点。 谢谢! UPDATE 抱歉延迟回到这个! 这些答案都很棒,我希望我能给大家一点。 我最终使用了jbtule的解决方案(由Sam Saffron编辑),将IDynamicParameters传递给Dapper,所以我觉得我必须给他答案。 其他答案也很好,并回答了我提出的具体问题。 我非常感谢大家的时间!

如何将匿名类型作为参数传递?

如何将匿名类型作为参数传递给其他函数? 考虑这个例子: var query = from employee in employees select new { Name = employee.Name, Id = employee.Id }; LogEmployees(query); 这里的变量query没有强类型。 我应该如何定义我的LogEmployees函数来接受它? public void LogEmployees (? list) { foreach (? item in list) { } } 换句话说,我应该使用什么而不是? 分数。

Moq是一个匿名类型的函数

我正试图嘲笑这种方法 Task GetResultAsync(Func transformFunc) 像这样 iMock.Setup(m => m.GetResultAsync(It.IsAny<Func>())).ReturnsAsync(new { isPair = false }); 测试执行调用的方法将匿名类型传递给generics参数,如下所示 instance.GetResultAsync(u => new {isPair = u == “something” }) //dont look at the function return because as generic could have diferent implementations in many case Moq永远不会将我的GetResultAsync方法与发送的参数匹配。 我正在使用Moq 4

如何在匿名类型上实现Equals和GetHashCode?

帮助说: 匿名类型是直接从对象派生的类类型,不能转换为除object之外的任何类型。 编译器为每个匿名类型提供名称,尽管您的应用程序无法访问它。 从公共语言运行库的角度来看,匿名类型与任何其他引用类型没有区别。 如果程序集中的两个或多个匿名对象初始值设定项指定了具有相同顺序且具有相同名称和类型的属性序列,则编译器会将对象视为相同类型的实例。 它们共享相同的编译器生成的类型信息。 因为匿名类型上的Equals和GetHashCode方法是根据属性的Equals和GetHashCode方法定义的,所以同一匿名类型的两个实例只有在它们的所有属性相等时才相等。 这些都是真的,但是怎么样? 参考源明确地显示了如何比较对象( ReferenceEquals )和“直接从对象派生”的类型不能具有这种特殊行为。 它与ValueType的Equals行为也不匹配。 那怎么办? 匿名类型如何覆盖Equals()和GetHashCode()而没有任何可见的覆盖?