Ho un metodo come segue:Ottenere valore dal tipo anonimo
public void MyMethod(object obj){
// implement
}
E mi chiamare in questo modo:
MyMethod(new { myparam= "waoww"});
Così come posso implementare MyMethod()
per ottenere il valore myparam?
Modifica
Io uso questo:
dynamic d= obj;
string param = d.myparam;
ma l'aumento di errore:
'object' does not contain a definition for 'myparam'
anche io uso punto di interruzione e vedo la d ha myparam proprietà della stringa.
E non v'è alcun modo per verificare il tipo dinamico se contenere qualsiasi proprietà come questa:
if(d.contain(myparam))?
Modifica II
Questo è il mio codice principale:
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
}
e chiamalo come:
<p>@Html.SecureActionLink("Secure Link between Areas", "Index", "Context",
new { area = "Settings" }, null)</p>
e di errore è:
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
Modifica III
Questa è la mia AssemblyInfo di definizione HtmlHelper:
[assembly: AssemblyTitle("MyProject.Presentation")]
[assembly: InternalsVisibleTo("cpanel.MyProject.dev")]
ma c'è un errore ancora: 'object' does not contain a definition for 'area'
io uso assemblee diverse ma come è possibile, quando uso il punto di interruzione, posso vedere che il mio dinamico areaobject
ha area
nome proprietà e anche io posso vedere il valore di questo, ma l'errore dire: 'object' does not contain a definition for 'area'
Non riesco a capire come può essere possibile?
Modifica
posso cambiare l'assemblaggio e il tipo ora dinamica è interno ma l'errore rimane come prima
I tipi anonimi sono validi solo nell'ambito in cui vengono creati. In questo caso non sarà possibile utilizzarlo in MyMethod – Jon
Perché stai provando a farlo? È molto probabilmente una cattiva idea. – svick
Ho avuto la stessa risposta con questo articolo. https://stackoverflow.com/questions/5286695/how-do-i-get-data-from-an-anonymous-type-thats-been-converted-to-an-object/30462304#30462304 –