using System;
using System.Collections .Generic ;
using System.Linq ;
namespace Protocol
{
#region Consts
public enum ObjectType{
Register,
Data,
Clock,
Profile
}
public enum DataType{
INT_16,
INT_32,
INT_64,
UINT_16,
UINT_32,
UINT_64,
BYTE,
FLOAT_32,
FLOAT_64,
UFLOAT_32,
UFLOAT_64,
STRING,
BYTE_STRING,
ARRAY,
STRUCT,
TIME
}
#endregion
public class ProtocolObject
{
private readonly Dictionary< int , ObjectAttribute> _attributes;
private readonly string _code;
private readonly string _name;
public ProtocolObject( string code, string name)
{
if ( code is null )
{
throw new ArgumentNullException( nameof( code) ) ;
}
if ( name is null )
{
throw new ArgumentNullException( nameof( name) ) ;
}
_code = code;
_name = name;
_attributes = new Dictionary< int , ObjectAttribute> ( ) ;
}
public string Code => _code;
public string Name => _name;
public ObjectType Type { get; set; }
public void AddAttribute( ObjectAttribute attribute)
{
if ( attribute is null )
throw new ArgumentNullException( nameof( attribute) ) ;
if ( _attributes.Any ( x=> x.Key == attribute.Index ) )
throw new InvalidOperationException( "Атрибут с данным индексом присутствует в объекте" ) ;
if ( attribute.Index <= 0 )
throw new ArgumentException( "Индекс должен быть положительным числом больше 0" ) ;
_attributes.Add ( attribute.Index , attribute) ;
}
public ObjectAttribute GetAttributeByIndex( int index) => _attributes[ index] ;
}
public class ObjectAttribute
{
public DataType Type { get; set; }
public int Index { get; set; }
public string Value { get; set; } = string.Empty ;
}
}
dXNpbmcgU3lzdGVtOwp1c2luZyBTeXN0ZW0uQ29sbGVjdGlvbnMuR2VuZXJpYzsKdXNpbmcgU3lzdGVtLkxpbnE7CgpuYW1lc3BhY2UgUHJvdG9jb2wKewogICAgI3JlZ2lvbiBDb25zdHMKICAgIHB1YmxpYyBlbnVtIE9iamVjdFR5cGV7CiAgICAgICAgUmVnaXN0ZXIsCiAgICAgICAgRGF0YSwKICAgICAgICBDbG9jaywKICAgICAgICBQcm9maWxlCiAgICB9CiAgICAgICAgcHVibGljIGVudW0gRGF0YVR5cGV7CiAgICAgICAgSU5UXzE2LAogICAgICAgIElOVF8zMiwKICAgICAgICBJTlRfNjQsCiAgICAgICAgVUlOVF8xNiwKICAgICAgICBVSU5UXzMyLAogICAgICAgIFVJTlRfNjQsCiAgICAgICAgQllURSwKICAgICAgICBGTE9BVF8zMiwKICAgICAgICBGTE9BVF82NCwKICAgICAgICBVRkxPQVRfMzIsCiAgICAgICAgVUZMT0FUXzY0LCAgICAgICAgCiAgICAgICAgU1RSSU5HLAogICAgICAgIEJZVEVfU1RSSU5HLAogICAgICAgIEFSUkFZLAogICAgICAgIFNUUlVDVCwKICAgICAgICBUSU1FCiAgICB9CiAgICAjZW5kcmVnaW9uCiAgICBwdWJsaWMgY2xhc3MgUHJvdG9jb2xPYmplY3QKICAgIHsKICAgICAgICBwcml2YXRlIHJlYWRvbmx5IERpY3Rpb25hcnk8aW50LCBPYmplY3RBdHRyaWJ1dGU+IF9hdHRyaWJ1dGVzOwogICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc3RyaW5nIF9jb2RlOwogICAgICAgIHByaXZhdGUgcmVhZG9ubHkgc3RyaW5nIF9uYW1lOwoKICAgICAgICBwdWJsaWMgUHJvdG9jb2xPYmplY3Qoc3RyaW5nIGNvZGUsIHN0cmluZyBuYW1lKQogICAgICAgIHsKICAgICAgICAgICAgaWYgKGNvZGUgaXMgbnVsbCkKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50TnVsbEV4Y2VwdGlvbihuYW1lb2YoY29kZSkpOwogICAgICAgICAgICB9CgogICAgICAgICAgICBpZiAobmFtZSBpcyBudWxsKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgQXJndW1lbnROdWxsRXhjZXB0aW9uKG5hbWVvZihuYW1lKSk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICAgIF9jb2RlID0gY29kZTsKICAgICAgICAgICAgX25hbWUgPSBuYW1lOwogICAgICAgICAgICBfYXR0cmlidXRlcyA9IG5ldyBEaWN0aW9uYXJ5PGludCwgT2JqZWN0QXR0cmlidXRlPigpOwogICAgICAgIH0KICAgICAgICBwdWJsaWMgc3RyaW5nIENvZGUgPT4gX2NvZGU7IAogICAgICAgIHB1YmxpYyBzdHJpbmcgTmFtZSA9PiBfbmFtZTsKICAgICAgICBwdWJsaWMgT2JqZWN0VHlwZSBUeXBlIHtnZXQ7c2V0O30KCiAgICAgICAgcHVibGljIHZvaWQgQWRkQXR0cmlidXRlKE9iamVjdEF0dHJpYnV0ZSBhdHRyaWJ1dGUpCiAgICAgICAgewogICAgICAgICAgICBpZihhdHRyaWJ1dGUgaXMgbnVsbCkKICAgICAgICAgICAgICAgIHRocm93IG5ldyBBcmd1bWVudE51bGxFeGNlcHRpb24obmFtZW9mKGF0dHJpYnV0ZSkpOwogICAgICAgICAgICBpZihfYXR0cmlidXRlcy5BbnkoeD0+eC5LZXkgPT0gYXR0cmlidXRlLkluZGV4KSkKICAgICAgICAgICAgICAgIHRocm93IG5ldyBJbnZhbGlkT3BlcmF0aW9uRXhjZXB0aW9uKCLQkNGC0YDQuNCx0YPRgiDRgSDQtNCw0L3QvdGL0Lwg0LjQvdC00LXQutGB0L7QvCDQv9GA0LjRgdGD0YLRgdGC0LLRg9C10YIg0LIg0L7QsdGK0LXQutGC0LUiKTsKICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZS5JbmRleCA8PSAwKQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEFyZ3VtZW50RXhjZXB0aW9uKCLQmNC90LTQtdC60YEg0LTQvtC70LbQtdC9INCx0YvRgtGMINC/0L7Qu9C+0LbQuNGC0LXQu9GM0L3Ri9C8INGH0LjRgdC70L7QvCDQsdC+0LvRjNGI0LUgMCIpOwogICAgICAgICAgICBfYXR0cmlidXRlcy5BZGQoYXR0cmlidXRlLkluZGV4LCBhdHRyaWJ1dGUpOwogICAgICAgIH0KICAgICAgICBwdWJsaWMgT2JqZWN0QXR0cmlidXRlIEdldEF0dHJpYnV0ZUJ5SW5kZXgoaW50IGluZGV4KSA9PiBfYXR0cmlidXRlc1tpbmRleF07CiAgICB9CgogICAgcHVibGljIGNsYXNzIE9iamVjdEF0dHJpYnV0ZQogICAgewogICAgICAgIHB1YmxpYyBEYXRhVHlwZSBUeXBlIHtnZXQ7c2V0O30KICAgICAgICBwdWJsaWMgaW50IEluZGV4IHtnZXQ7c2V0O30KICAgICAgICBwdWJsaWMgc3RyaW5nIFZhbHVlIHsgZ2V0OyBzZXQ7IH0gPSBzdHJpbmcuRW1wdHk7CiAgICB9Cn0K
compilation info
prog.cs(41,22): error CS1644: Feature `pattern matching' cannot be used because it is not part of the C# 7.0 language specification
prog.cs(46,22): error CS1644: Feature `pattern matching' cannot be used because it is not part of the C# 7.0 language specification
prog.cs(61,26): error CS1644: Feature `pattern matching' cannot be used because it is not part of the C# 7.0 language specification
Compilation failed: 3 error(s), 0 warnings
stdout