是否可以使用匿名类型实现接口.我有一段我想要工作的代码,但不知道该怎么做.
我有几个答案要么说不,要么创建一个实现接口的类构造新的实例.这不是很理想,但我想知道是否有一种机制可以在界面上创建一个瘦动态类,这将使这个变得简单.
public interface DummyInterface
{
string A { get; }
string B { get; }
}
public class DummySource
{
public string A { get; set; }
public string C { get; set; }
public string D { get; set; }
}
public class Test
{
public void WillThisWork()
{
var source = new DummySource[0];
var values = from value in source
select new
{
A = value.A,
B = value.C + "_" + value.D
};
DoSomethingWithDummyInterface(values);
}
public …Run Code Online (Sandbox Code Playgroud) C#4.0引入了一种名为"dynamic"的新类型.这听起来不错,但程序员会用它做什么?
有没有可以节省一天的情况?
我正在尝试将字典转换为匿名类型,每个键都有一个属性.
我尝试谷歌它,但我能找到的是如何将匿名对象转换为字典.
我的字典看起来像这样:
var dict = new Dictionary<string, string>
{
{"Id", "1"},
{"Title", "My title"},
{"Description", "Blah blah blah"},
};
Run Code Online (Sandbox Code Playgroud)
我想返回一个看起来像这样的匿名对象.
var o = new
{
Id = "1",
Title = "My title",
Description = "Blah blah blah"
};
Run Code Online (Sandbox Code Playgroud)
所以我希望它循环遍历字典中的每个keyValuePair并在对象中为每个键创建一个属性.
我不知道从哪里开始.
请帮忙.
如何访问其声明范围之外的匿名类型的对象?
例如
void FuncB()
{
var obj = FuncA();
Console.WriteLine(obj.Name);
}
??? FuncA()
{
var a = (from e in DB.Entities
where e.Id == 1
select new {Id = e.Id, Name = e.Name}).FirstOrDefault();
return a;
}
Run Code Online (Sandbox Code Playgroud) 我可以将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
Run Code Online (Sandbox Code Playgroud)
//这是我的实体
public class Customer
{
#region Public Properties
[ColumnAttribute(Name = "IdColumn")]
public string Id { get; set; }
[ColumnAttribute(Name = "NameColumn")]
public string Name { get; set; }
[ColumnAttribute(Name = "AddressColumn")] …Run Code Online (Sandbox Code Playgroud) 我不明白之间的差别Anonymous Class,并object Class
如果我有一个匿名类型对象:
var x = new []
{
new {name = "x", phone = 125},
new {name = "f", phone = 859},
new {name="s",phone=584}
};
Run Code Online (Sandbox Code Playgroud)
我可以看到我如何迭代它并获得这些属性的值 x.name ...
但如果我改成这个 object
var x = new Object[]
{
new {name = "x", phone = 125},
new {name = "f", phone = 859},
new {name="s",phone=584}
};
Run Code Online (Sandbox Code Playgroud)
那么如果我循环通过它我将无法访问属性?我已经尝试了不同的方法来从这个对象获取值,但我失败了,可能是我错过了什么?什么是生成点,object array我该如何消费呢?
我知道我不能做这样的事情: new Object[] {name = 'x' ...
我的 API 返回一个object, 填充了匿名类型。我可以GET通过 HTTP 并解析为 json。
但是......我对同一方法的单元测试无法解析匿名类型。
使用 Dotnet 框架 4.7.2。
下面的代码显示了一个项目中
的调用者和另一个项目中的被调用者,
有 2 次不同的失败尝试。第二个是从 SO和这里复制的,没有评论它不起作用。但是……不适合我。
错误信息是:
System.InvalidCastException:无法将
类型为“<>f__AnonymousType1`2[System.String,System.String]”的对象转换
为类型“<>f__AnonymousType0`2[System.String,System.String]”。
在哪里可以看到类型是不同的。
但是 IIRC 前段时间有一个 dotnet 更新解决了这个问题,让它们“平等”。
我试图通过从 dotnet 框架 web api 返回匿名类型来解决用例。
(还有其他解决方案,如动态、反射、类型或更多端点,但这是另一个问题)
请注意,此测试用例不涉及 HTTP,它纯粹是 dotnet 框架问题。
public class MyController: ApiController
{
public object Get(string id)
{
return new { Key = id, Value = "val:" + id };
}
}
Run Code Online (Sandbox Code Playgroud)
[Fact]
public void MyTest
{ …Run Code Online (Sandbox Code Playgroud) 如何遍历Object类型的List?
List<object> countries = new List<object>();
countries.Add(new { Name = "United States", Abbr = "US" , Currency = "$"});
countries.Add(new { Name = "Canada", Abbr = "CA", Currency = "$" });
...more
Run Code Online (Sandbox Code Playgroud)
我想在我的视图中做一些事情(使用属性名称)
@model ViewModel
@foreach(object country in Model.Countries)
{
Name = country.Name
Code = country.Abbr
Currency = country.Currency
}
Run Code Online (Sandbox Code Playgroud)
更新:忘了提到我正在使用MVC,我想在View中循环数据.States对象是ViewModel要查看的强类型属性之一.
更新:按要求更新以显示如何从控制器调用View -
[HttpPost]
public ActionResult Index(FormCollection form)
{
..some validations and some logic
ViewModel myViewModel = new ViewModel();
myViewModel.Countries = GetCountries(); -- this is where data get initialized
myViewModel.Data …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用 .NET 4.0 中的 System.Runtime.Caching.MemoryCache 类。我有一个通用的方法,因此我可以将任何类型传递到内存缓存中,并在调用时将其取回。
该方法返回一个 object 类型的对象,该对象是具有包含缓存对象的字段 Value 的匿名类型。
我的问题是,如何将要返回的对象转换为其相应的类型?
下面是我的代码...
public static class ObjectCache
{
private static MemoryCache _cache = new MemoryCache("GetAllMakes");
public static object GetItem(string key)
{
return AddOrGetExisting(key, () => InitialiseItem(key));
}
private static T AddOrGetExisting<T>(string key, Func<T> valueFactory)
{
var newValue = new Lazy<T>(valueFactory);
var oldValue = _cache.AddOrGetExisting(key, newValue, new CacheItemPolicy()) as Lazy<T>;
try
{
return (oldValue ?? newValue).Value;
}
catch
{
_cache.Remove(key);
throw;
}
}
/// <summary>
/// How can i access Value …Run Code Online (Sandbox Code Playgroud) 我有一个函数创建一个本地List<object>,其中对象是一个匿名类型.我需要返回这些结果Dictionary<string, SortedList<DateTime, double>>.
数据列表如下所示.
{ Security = "6752 JT", Date = {1/17/2011 12:00:00 AM}, zScore = 1 }
{ Security = "6753 JT", Date = {1/17/2011 12:00:00 AM}, zScore = 2 }
{ Security = "6754 JT", Date = {1/17/2011 12:00:00 AM}, zScore = 3 }
{ Security = "6752 JT", Date = {1/18/2011 12:00:00 AM}, zScore = 1 }
{ Security = "6753 JT", Date = {1/18/2011 12:00:00 AM}, zScore = 2 }
{ Security …Run Code Online (Sandbox Code Playgroud) 我创建了一个具有布尔属性和集合的对象.
我所做的:
我有一个在post上调用的方法,后者又调用另一个返回对象的方法.我的问题是我没有得到对象属性.
public object methodThatReturnsAnObject(string a, string b)
{
object data = new {isSaved = false, personsToCredit = ""}
// perform my code and if all is valid i set values to my object properties and return the object
data = new {isSaved = valid, personsToCredit = persons }
return data;
}
Run Code Online (Sandbox Code Playgroud)
我的另一种方法:
object Information = methodThatReturnsAnObject(string a, string b);
Run Code Online (Sandbox Code Playgroud)
我的问题是什么?当我调试Information对象包含我想要获取的两个属性但是当我键入Information.isSaved它时它说信息不包含定义isSaved?
c# ×11
.net ×2
dictionary ×2
generics ×2
asp.net ×1
asp.net-mvc ×1
c#-4.0 ×1
dynamic ×1
linq ×1
memorycache ×1
object ×1