2016-07-20 3 views
0

В JavaScript, я могу вызвать функцию следующим образом:Есть ли способ, чтобы эмулировать Javascript встроенных объектов в C#

x = myFunction({"meetingID": 2, "meetingRoom": "A103"}); 

MYFUNCTION(), а затем получает объект, который я могу разобрать с JSON, или просто с помощью ссылки Свойства объекта:

function myFunction(args) { 
    var x = args.meetingID; 
} 

Есть ли такая подобная конструкция в C#? Существуют ли такие вещи, как «встроенные объекты» или «объекты на лету»?

ответ

2

Вы можете использовать anonymous type в сочетании с ключевым словом dynamic.

void MyFunction(dynamic args) 
{ 
    var x = args.MeetingId; 
} 

MyFunction(new { MeetingId = 2, MeetingRoom = "A103" }); 

Остерегайтесь - это отличается от javascript. Если объект, переданный в MyFunction, не содержит свойства MeetingId, вы получите исключение во время выполнения.

+0

О, ничего себе! Это почти идентично лечению js. Сделаю для меня очень легкий переход. Просто нужно «новое» ключевое слово перед объектом {}. ;-) EDIT: Честно говоря, мне это нравится ЛУЧШЕ, чем способ js («label»: value). –

+0

Обратите внимание, что это заметно медленно во время выполнения. –

0

Вы можете использовать словарь

public static void Main() 
{ 
    myFunction(new Dictionary<string, object>() 
     { 
      { "meetingID", 2}, 
      { "meetingRoom", "A103"} 
     } 
    ); 
} 

public static void myFunction(Dictionary<string,object> args) 
{ 
    var x = args["meetingID"]; 
} 
0

Просто небольшое предложение .. если возможно, это будет безопаснее использовать дополнительные параметры вместо:

string myFunction(int meetingID = 0, string meetingRoom = null) { 
    var x = meetingID; 
} 

, то вы можете использовать его как:

var x = myFunction(meetingID: 2, meetingRoom: "A103"); 
var y = myFunction(meetingRoom:"A103"); // order doesn't matter if you specify the parameter name 
var z = myFunction(3, "B109"); 
var _ = myFunction(); 
Смежные вопросы