2016-01-22 3 views
-1

У меня есть следующий код Lua, который я хотел бы преобразовать в C#. Единственная проблема - это операции с строками. Я не знаю, как перевести их на C#:Преобразование Lua в C#

if (classaddress~=nil) and (classname~=nil) then 
    classname=classname:match "^%s*(.-)%s*$" 
    if (classname~='') then 
    local r=string.find(classname, "[^%a%d_.]", 1) 
    if (r==nil) or (r>=5) then 
     return currentaddress, classaddress, classname 
    end 
    end 
end 
+0

Можете ли вы написать код psuedo, что это делает? – Danieboy

+0

Вот в чем вопрос. Я не знаю, что такое «^% s * (.-)% s * $" или "[^% a% d_.]". Я просто знаю, что classaddress является целым числом, а classname - строкой. Затем проверяется имя класса string, но я не знаю, что, как я мало знаю о LUA. – Baldik

+1

@Baldik: Lua не является аббревиатурой; это собственное имя. –

ответ

3

Строки в вашем коде patterns. Они похожи на Регулярные выражения, но немного менее могущественны. Первое совпадение соответствует всей строке, исключая пробелы в начале и конце строки, поэтому ведет себя как Trim. Второй шаблон используется для поиска первого символа, который не является буквой, цифрой, подчеркиванием (_) или точкой (.). Переведено на C#, это может выглядеть так:

public class MyReturnObject { 
    public MyReturnObject(int currentAddress, int classAddress, string className) { 
     // ... 
    } 
} 

public MyReturnObject ParseStuff(int? classAddress, string className, int currentAddress) { 
    if(classAddress.HasValue && className != null) { 
     className = className.Trim(); 
     if(!String.IsNullOrEmpty(className)) { 
      var r = System.Text.RegularExpressions.Regex.Match(className, @"[^\a\d_.]")?.Index; 

      if(!r.HasValue || r.Value >= 5) { 
       return new MyReturnObject(currentAddress, classAddress.Value, className); 
      } 
     } 
    } 

    return null; 
} 
+0

Благодарим вас также за разъяснение! – Baldik

Смежные вопросы