C# - Невозможно построить массив из класса - PullRequest
0 голосов
/ 10 февраля 2020

Я работаю над проектом Xamarin.Forms с C# для подключения к серверу OP C и чтения значений. Я могу читать значения; но у меня проблемы с компиляцией их в виде списка или массива. После этого я хотел бы преобразовать значения в ASCII.

Ниже приведен код, который передается;

            var readRequest = new ReadRequest
            {
                // set the NodesToRead to an array of ReadValueIds.
                NodesToRead = new[] {
                // construct a ReadValueId from a NodeId and AttributeId.
                new ReadValueId {
                    // you can parse the nodeId from a string.
                    // e.g. NodeId.Parse("ns=2;s=Demo.Static.Scalar.Double")
                    NodeId = NodeId.Parse("ns=2;s=Link_CatConHybrid.2D.InStr1"),

                    //NodeId.Parse(VariableIds.Server_ServerStatus),
                    // variable class nodes have a Value attribute.
                    AttributeId = AttributeIds.Value
                },

                new ReadValueId
                {
                    NodeId = NodeId.Parse("ns=2;s=Link_CatConHybrid.2D.InStr2"),
                    AttributeId = AttributeIds.Value
                }
            }

            };
            // send the ReadRequest to the server.
            var readResult = await channel.ReadAsync(readRequest);

            // DataValue is a class containing value, timestamps and status code.
            // the 'Results' array returns DataValues, one for every ReadValueId.

            DataValue dvr = readResult.Results[0];
            DataValue dvr2 = readResult.Results[1];

            Console.WriteLine("The value of Instr1 is {0}, InStr2 is {1}", dvr.Variant.Value, dvr2.Variant.Value);

Что я делаю неправильно / пропускаю?

Редактировать: Как бы я объединил все readResults в один? readResults

Ответы [ 2 ]

1 голос
/ 10 февраля 2020

Просто создайте список DataValue и сохраните их. Попробуйте как:

List<DataValue> endResult = new List<DataValue>();
foreach (DataValue  value in readResult.Results)
{
    endResult.Add(value);
}
0 голосов
/ 10 февраля 2020

Поскольку Results представляет собой совокупность данных DataValue, вы можете просто сказать

var dataValueCollection = readResult.Results; // if you want return collection you can just say return readResult.Results

Если вы пытаетесь записать значения в консоль, тогда вы можете иметь l oop непосредственно в readResult.Results, как показано ниже :

foreach(var dv in readResult.Results)
{
    Console.WriteLine("The Value of InStr = {0}", dv.Variant.Value);
    Console.WriteLine("The Value of InStr = {0}", dv.Variant.ReadValueId); // This line shows how to access ReadValueId.
    // You can access other properties same as above
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...