gpt4 book ai didi

c# - 从匿名类型中获取值

转载 作者:可可西里 更新时间:2023-11-01 03:12:05 25 4
gpt4 key购买 nike

我有一个方法如下:

public void MyMethod(object obj){

// implement

}

我这样调用它:

MyMethod(new { myparam= "waoww"});

那么如何实现 MyMethod() 来获取 myparam 值呢?

编辑

我用这个:

dynamic d= obj; 
string param = d.myparam;

但是错误增加了:

'object' does not contain a definition for 'myparam' 

我还使用断点,我看到 d 有 myparam 字符串属性。

有没有办法检查动态类型是否包含这样的任何属性:

if(d.contain(myparam))?

编辑二

这是我的主要代码:

public static MvcHtmlString SecureActionLink(this HtmlHelper htmlHelper, 
string linkText, string actionName, string controllerName,
object routeValues, object htmlAttributes) {


string areaName =
(string)htmlHelper.ViewContext.RouteData.DataTokens["area"];

dynamic areaObject = routeValues;

if(areaObject != null && !string.IsNullOrEmpty(areaObject.area))
areaName = areaObject.area;

// more
}

并将其命名为:

<p>@Html.SecureActionLink("Secure Link between Areas", "Index", "Context", 
new { area = "Settings" }, null)</p>

错误是:

Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 'object' does not contain a
definition for 'area'

Line 303: dynamic areaObject = routeValues;
Line 304:
Line 305: if(areaObject != null && !string.IsNullOrEmpty(areaObject.area))
Line 306: areaName = areaObject.area;
Line 307:

Source File: D:\Projects\MyProject\HtmlHelpers\LinkExtensions.cs Line: 305

编辑三

这是我的 HtmlHelper 定义的 AssemblyInfo:

[assembly: AssemblyTitle("MyProject.Presentation")]
[assembly: InternalsVisibleTo("cpanel.MyProject.dev")]

但是还有一个错误:'object' 不包含 'area' 的定义我使用不同的程序集,但怎么可能,当我使用断点时,我可以看到我的动态 areaobject 具有 area name 属性,而且我也可以看到它的值,但是错误说:'object' 不包含 'area' 的定义 我不明白这怎么可能?

编辑

我更改了程序集,现在动态类型是内部的,但错误仍然存​​在

最佳答案

使用这个:

string area = areaObject.GetType().GetProperty("area").GetValue(areaObject, null);

关于c# - 从匿名类型中获取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9750078/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com