2014-03-18 2 views
2

Я получаю ошибку в этой точке «Функция» говорит, что system.data.function' недоступен из-за уровня защиты, когда я пытался преобразовать его из vb .net на C#system.data.function 'недоступен из-за его уровня защиты

mMSH = mSplittxt.Where(Function, x, x.ToString().StartsWith("MSH|")).Select(Function, x, x).FirstOrDefault.ToString(); 

ниже мой код, спасибо за помощь.

 System.Net.Sockets.NetworkStream networkStream = default(System.Net.Sockets.NetworkStream); 
     //-> some way it is called initialization or getting stream from the connected port. 

     networkStream = HL7Server.GetStream(); 

     //-->check we have data 
     //GetACK(networkStream, True) 

     //-> write to net stream 

     networkStream.Write(bytesSent, 0, bytesSent.Length); 

     networkStream.Flush(); 


     //HL7Server.Close() 
     hasConnected = false; 

     //-> get current MSH segment 
     dynamic mSplittxt = hl7message.Replace(System.Convert.ToChar(11).ToString(), "").Replace(System.Convert.ToChar(28).ToString(), "").Split(System.Convert.ToChar(13)); 
     //mMSH = mSplittxt.Where(x => x.ToString().StartsWith("MSH|")).Select(x => x).FirstOrDefault.ToString(); 
     mMSH = mSplittxt.Where(Function, x, x.ToString().StartsWith("MSH|")).Select(Function, x, x).FirstOrDefault.ToString(); 


     //MessageBox.Show("BEFORE ACK MSH: " & mMSH) 

     //-> get acknowledgment. 

     bool hasData = false; 
     int retStat = 0; 
     System.DateTime stTim = System.DateTime.Now; 
     TimeSpan sp = System.DateTime.Now.Subtract(stTim); 
     // wait for 5 seconds to get ack 
     while (true) 
     { 
      hasData = GetACK(ref networkStream, false, ref retStat); 
      sp = System.DateTime.Now.Subtract(stTim); 
      // stay until 5 seconds or success acknowledge received 
      if (sp.Seconds > 5 | hasData == true) 
       break; // TODO: might not be correct. Was : Exit While 

      Thread.Sleep(1000); 

     } 

ответ

1

Этот синтаксис лямбда неверен для C#

mMSH = mSplittxt.Where(x => x.ToString().StartsWith("MSH|")) 
       .Select(x => x).FirstOrDefault().ToString(); 

Это, вероятно, может быть исправлено, так что вы не до конца вызова ToString, если он является недействительным.

mMSH = mSplittxt.Where(x => x.ToString().StartsWith("MSH|")) 
       .Select(x => x.ToString()).FirstOrDefault(); 

или даже

mMSH = mSplittxt.Select(x => x.ToString()) 
       .Where(x => x.StartsWith("MSH|")) 
       .FirstOrDefault(); 
0

Я не знаю, как вы переводите VB на C#, но обычный .Where() синтаксис выглядит следующим образом:

mMSH = mSplittxt.Where(x => x.ToString().StartsWith("MSH|")) 
       .Select(x => x) 
       .FirstOrDefault() 
       .ToString(); 

Пожалуйста, обратите внимание, что я ve также скорректировал отчет Select, а также FirstOrDefault

0

To ma ка это ясно, как правило, это VB.NET лямбда синтаксис:

может быть преобразован в синтаксис C#, как:

x => x 

Так, например, для Вашего случая является следующим:

//VB.NET version 
mMSH = mSplittxt.Where(Function(x) x.ToString().StartsWith("MSH|")).Select(Function(x) x).FirstOrDefault().ToString() 

//C# version 
mMSH = mSplittxt.Where(x => x.ToString().StartsWith("MSH|")).Select(x => x).FirstOrDefault().ToString(); 
0

Спасибо всем за ваш быстрый ответ. я решил.

Строка [] mSplittxt = hl7message.Replace (System.Convert.ToChar (11) .ToString(), "") .Replace (System.Convert.ToChar (28) .ToString(), "") .Split (System.Convert.ToChar (13));

mMSH = mSplittxt.Where (x => x.ToString(). StartsWith («MSH |»)). Выберите (x => x) .FirstOrDefault(). ToString();

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