2015-09-12 2 views
-4

Мне нужно преобразовать это в C#, но я не уверен, как это сделать.Нужна помощь в преобразовании Js в C#

getParamsAsStr = function() { 
    var keys = Object.keys(_self.params ? _self.params : {}); 
    keys.sort(); 
    var response = ""; 
    for (var i = 0 ; i < keys.length ; i++) { 
     response += _self.params[keys[i]]; 
    } 
    return response; 
} 

(В принципе, я хотел бы знать, что я должен использовать вместо Object.keys)

+2

Было бы хорошо, чтобы увидеть вашу попытку до сих пор, даже если он еще не компилировать. –

ответ

1

Эта функция перебирает перечислимых свойств какого-либо объекта (в Object.keys) и выписывает значений свойств в строку - хотя без ключей и без каких-либо разделителей.

Я не знаю, что означает _self.params, поскольку он не является внутренним JavaScript, и вы не указали его определение. .

Прямой перевод на C# не представляется возможным, как C#/NET не использовать прототипы с перечислимых свойств, наиболее близким аналогом является представление _self.params как Dictionary<Object,String>:

public static String GetParamsAsStr(Dictionary<Object,String> p) { 
    if(p == null || p.Count == 0) return String.Empty; 
    StringBuilder sb = new StringBuilder(); 
    foreach(Object key in p.Keys) sb.Append(p[key]); 
    return sb.ToString(); 
} 
+0

Вы забыли отсортировать ключи –

+0

У меня только «ответ» на мой вопрос, чтобы поставить весь связанный код ... будет ли эта статическая строка работать именно так? –

0

Я пишу это как ответ чтобы иметь возможность разместить все это ...

Это оригинальный JS код, который задает первый параметр, чтобы сделать, позже, некоторые API вызовов:

var Signer = function() { 
    this.apkId = getApkId(); 
    this.apkSecret = getApkSecret(); 
    this.servicio = ""; 
    this.sessionToken = ""; 
    this.timestamp = ""; 
    this.requestId = ""; 
    this.params = ""; 
    var _self = this; 
    this.getParamsAsStr = function() { 
     var keys = Object.keys(_self.params ? _self.params : {}); 
     keys.sort(); 
     var response = ""; 
     for (var i = 0 ; i < keys.length ; i++) { 
      response += _self.params[keys[i]]; 
     } 
     return response; 
    } 
    this.getSignature = function() { 
     var baseString = 
      _self.apkSecret + 
      _self.servicio + 
      _self.sessionToken + 
      _self.timestamp + 
      _self.requestId + 
      _self.getParamsAsStr(); 
     console.log("Signature pre hash:\n" + baseString); 
     baseString = baseString.toLowerCase(); 

     return sha1(baseString); 
    } 
} 

И до сих пор, что я сделал в C# является следующее:

public class Signer 
{ 
    public string appId = getApkId(); 
    public string appSecret = getAppSecret(); 
    public string servicio = ""; 
    public string sessionToken = ""; 
    public string timestamp = ""; 
    public string requestId = ""; 
    public string params = ""; 

    //Here I have to write the getParamsAsStr() 

    private static string getApkId(){ 
     string id = "xxxxxxxxxxxxxxxx"; 
     return id; 
    } 

    private static string getAppSecret(){ 
     string id = "xxxxxxxxxxxxxxxx"; 
     return id; 
    } 
}