рдлрд┐рд▓рд╣рд╛рд▓ рдХреЗрд╡рд▓ рд╕рд╛рдорд╛рдиреНрдп рдЧреБрдгреЛрдВ рдХреЗ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдирд╛ рд╕рдВрднрд╡ рд╣реИ рдФрд░ рд╕реВрдЪрдХрд╛рдВрдХ рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рдХреЛрдИ рддрд░реАрдХрд╛ рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рдПрдХ рдРрд╕рд╛ рдкрд░реАрдХреНрд╖рдг рд▓рд┐рдЦрдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдЬреЛ рдРрд╕рд╛ рдХреБрдЫ рджрд┐рдЦрддрд╛ рд╣реИ:
```рд╕реА#
[рдЯреЗрд╕реНрдЯрдлрд┐рдХреНрдЪрд░]
рдкрдмреНрд▓рд┐рдХ рдХреНрд▓рд╛рд╕ рдЯреЗрд╕реНрдЯрдХреНрд▓рд╛рд╕
{
рд╡рд░реНрдЧ рдЙрджрд╛рд╣рд░рдг
{
рдирд┐рдЬреА рд╢рдмреНрджрдХреЛрд╢
public string this[string key]
{
get { return dictionary[key]; }
set { dictionary[key] = value; }
}
}
[Test]
public void Test()
{
var obj = new Example
{
["TEST1"] = "1",
["TEST2"] = "2",
};
Assert.That(obj, Has.Property("Item", "TEST1").EqualTo("1").And.Property("Item", "TEST2").EqualTo("2"));
}
}
```
рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдкрд╕рдВрдж рдЖрдпрд╛ред
рд╕реА # рдирд╛рдорд┐рдд рдЕрдиреБрдХреНрд░рдорд┐рдд рдЧреБрдгреЛрдВ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рд▓реЗрдХрд┐рди рд╡реАрдмреАрдПрдирдИрдЯреА рдХрд░рддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рд┐рдВрдЯреИрдХреНрд╕ .Property("Name", index1, ...)
рдирд╛рдорд┐рдд рдЗрдВрдбреЗрдХреНрд╕рд░реНрд╕ рдХреЗ рд▓рд┐рдП рдЖрд░рдХреНрд╖рд┐рдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЗрд╕реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХреЗ рд▓рд┐рдП рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред рдореИрдВ рд▓реЛрдЧреЛрдВ рдХреЛ рдирд╛рдо рдкреИрд░рд╛рдореАрдЯрд░ рдореЗрдВ рдкрд╛рд╕ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рдХрд░рдХреЗ рд╕реА # рднрд╛рд╖рд╛ рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВред
рдЖрдк Has.Item("TEST1").EqualTo("1")
рдпрд╛ Has.Index("TEST1").EqualTo("1")
рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ?
@jnm2
рд╢реЙрд░реНрдЯрдХрдЯ рдХреЗ рд░реВрдк рдореЗрдВ "рдЖрдЗрдЯрдо" рдпрд╛ "рдЗрдВрдбреЗрдХреНрд╕рд░" рд╡рд┐рдзрд┐ рдХрд╛ рд╣реЛрдирд╛ рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рд╣реИ, рд▓реЗрдХрд┐рди рд╕реА # рдореЗрдВ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХрд╛ рдирд╛рдо рдмрджрд▓рдирд╛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рд╕рдВрднрд╡ рд╣реИ: https://stackoverflow.com/questions/5110403/class-with-indexer-and-property-named -рдЖрдЗрдЯрдо
@ Ch0senOne рдирд╛рдо рдмрджрд▓рдирд╛ рд╕рдВрднрд╡ рд╣реИред рд╕реНрдкрд╖реНрдЯ рд╣реЛрдиреЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХрд╣рдирд╛ рдЪрд╛рд╣рд┐рдП рдерд╛, рд╕реА # рдореЗрдВ рдПрдХ рдЧреИрд░-рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдмрдирд╛рдирд╛ рд╕рдВрднрд╡ рдирд╣реАрдВ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЖрдк рджреЛ рдЗрдВрдбреЗрдХреНрд╕рд░реНрд╕ рдШреЛрд╖рд┐рдд рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рди рд╣реА рдЖрдк рд╕реА # рд╕реЗ рдирд╛рдо рдХрд╛ рдЙрдкрднреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдХрд░ рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ Has.Item("value")
Contains.Item
рд╕рд╛рде рдмрд╣реБрдд рднреНрд░рдорд┐рдд рд╣реЛрдЧрд╛ред рддреЛ рд╢рд╛рдпрдж Has.Index("value")
?
рдЗрд╕рд▓рд┐рдП рдореИрдВ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╣реЛ рдЬрд╛рдПрдЧрд╛ Has.Index("IndexValue")
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХреЗ рд▓рд┐рдП рдФрд░ Has.Property("PropertyName", indexParams)
рдЧреИрд░-рдбрд┐рдлрд╝реЙрд▓реНрдЯ indexers рдХреЗ рд▓рд┐рдПред Has.Property
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░реНрд╕ рдХреЗ рд▓рд┐рдП рднреА рдХрд╛рдо рдХрд░рдирд╛ рд╕рдорд╛рдкреНрдд рдХрд░ рджреЗрдЧрд╛, рднрд▓реЗ рд╣реА рдореБрд╣рд╛рд╡рд░реЗрджрд╛рд░ рд╕реА # рдмрд╛рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП Has.Index
рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред
рдпрд╛ рдЕрдЧрд░ рд╣рдо рдкреНрдпрд╛рд░рд╛ рдмрдирдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ рд╣рдо Has.Index["IndexValue"]
рдФрд░
Has.Property("PropertyName")[indexparams]
...
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ, рдореБрдЭреЗ рдЖрд╢реНрдЪрд░реНрдп рд╣реИ рдХрд┐ рдЕрдЧрд░ рд╣рдо рд╕рд╛рде рднрд╛рдЧ рдорд┐рд▓ рд╕рдХрддрд╛ рд╣реИ Has.Item["AtIndex"]
рдХреНрд░рдо рдореЗрдВ рдЗрдВрдбреЗрдХреНрд╕рд░ рд╕рд┐рдВрдЯреЗрдХреНрд╕ рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рд╛рде рднреНрд░рдорд┐рдд рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╕реЗ рдмрдЪрдиреЗ рдХреЗ рд▓рд┐рдП Contains.Item("ItemValue")
... рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдореИрдВ рдХреНрдпрд╛ рд╣реИ рдХрд┐ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрддреЗ рд╣реИрдВ!
рдЖрдЗрдП рджреЗрдЦреЗрдВ рдХрд┐ рдЕрдиреНрдп @ рдиреВрдирд┐рдЯ/рдлреНрд░реЗрдорд╡рд░реНрдХ-рдЯреАрдо рдХреЗ рд╕рджрд╕реНрдп рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВред
рд╣рдордиреЗ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╕реНрдЯреНрд░рд┐рдВрдЧреНрд╕ рдХреЗ рдмрдЬрд╛рдп рд▓реИрдореНрдмреНрдбрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЧреБрдгреЛрдВ рдкрд░ рдЬрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рджрд┐рд╢рд╛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХреА рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрд╕ рдкрд░ рдмреЗрд╣рддрд░ рд╕рдордп рдмрд┐рддрд╛рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рдореИрдВ рдЕрдкрдиреЗ рдлреЛрди рдкрд░ рд╣реВрдВ рдЗрд╕рд▓рд┐рдП рдореИрдВ рдЖрдкрдХреЛ рдЗрд╢реНрдпреВ рдирдВрдмрд░ рдирд╣реАрдВ рджреЗ рд╕рдХрддрд╛ред
@CharliePoole https://github.com/nunit/nunit/issues/26?
рдпрд╣ Has.Property
рд▓рд┐рдП рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рд╣рдо рдХрд░ рд╕рдХрддреЗ рдереЗ:
Has.Property(_ => _.PropertyName[index1, ...])
Has.Property(_ => _.PropertyName, index1, ...)
рдореБрдЭреЗ рдЕрдм рднреА рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдореЗрдВ Has.Property
рддрдм рддрдХ рдХреБрдЫ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрдм рддрдХ рдХрд┐ рдЧреИрд░-рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЧреБрдгреЛрдВ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рди рд╣реЛ, рдФрд░ рдЕрднреА рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ Has.Index(value1, ...)
рдпрд╛ Has.Index[value1, ...]
рдпрд╛ Has.Item[value1, ...]
рдкреНрд░рджрд╛рди рдХрд░реЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХ рд╕рд╛рдорд╛рдиреНрдп рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ред
рд╡рд╣реА рд╣реИ рд╡реЛред рдореИрдВ рдЖрдкрдХреЗ рд╕рд╛рде рдирд╛рдорд┐рдд рдЕрдиреБрдХреНрд░рдордгрдХреЛрдВ рдкрд░ рд╕рд╣рдордд рд╣реВрдВ, рдЬрд┐рдирдХрд╛ рд╡реИрд╕реЗ рднреА рдЕрдиреБрд░реЛрдз рдирд╣реАрдВ рдХрд┐рдпрд╛ рдЧрдпрд╛ рд╣реИред
@ jnm2 рдЖрдкрдХреЗ рд╡рд┐рдЪрд╛рд░ рдХреЗ рд▓рд┐рдП, рдЖрдк рдПрдХ рдмрд╣реБ-рдХреБрдВрдЬреА рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рднреА рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП
this[string key1, string key2]
рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ рдЗрд╕ рдореБрджреНрджреЗ рдкрд░ рдХреЛрдИ рдЕрдкрдбреЗрдЯ рд╣реИ, рдпрд╛ рдРрд╕реЗ рдкреНрд░рдХрд╛рд░ рдкрд░ рдЗрдВрдбреЗрдХреНрд╕рд░реНрд╕ рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░рдиреЗ рдХрд╛ рд╡рд░реНрддрдорд╛рди рддрд░реАрдХрд╛ рд╣реИ рдЬреЛ IEnumerable рдХрд╛ рдЙрддреНрддрд░рд╛рдзрд┐рдХрд╛рд░реА рдирд╣реАрдВ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ рд╕рд┐рд░реНрдл рдПрдХ KeyNotFoundException рдХреЛ рдлреЗрдВрдХрдиреЗ рдХреА рдЬрд╛рдВрдЪ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред рдЗрдВрдбреЗрдХреНрд╕рд░ рдореЗрдВ рдПрдХ рдХреБрдВрдЬреА рдХреЗ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдореИрдВ рдФрд░ рдХреБрдЫ рднреА рджреЗрдЦ рд░рд╣рд╛ рд╣реВрдВ?
@ рдХреНрд░рд╢83 рд╣рд╛рдВ, рдореЗрд░рд╛ index1, ...
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдерд╛ рдХрд┐ рд╣рдо рдЬреЛ рдХреБрдЫ рднреА рдХрд░рддреЗ рд╣реИрдВ рдЙрд╕ рдкрд░ рд╣рдореЗрдВ рд╡рд┐рдЪрд╛рд░ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдореБрдЭреЗ рд╢рдмреНрджрд╛рд╡рд▓реА рдХреБрдВрдЬреА рдкрд╕рдВрдж рдирд╣реАрдВ рд╣реИ рдЬрдм рддрдХ рдХрд┐ рд╣рдо рдХрд┐рд╕реА рдРрд╕реА рд╡рд╕реНрддреБ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдирд╣реАрдВ рдХрд░ рд░рд╣реЗ рд╣реИрдВ рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рд╢рдмреНрджрдХреЛрд╢ рдпрд╛ рдХреБрдВрдЬреА рд╕рдВрдЧреНрд░рд╣ рд╣реИред рд╡реЗ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░реНрд╕ рд╡рд╛рд▓реА рдЪреАрдЬреЗрдВ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдбрд┐рдлреЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░реНрд╕ рд╡рд╛рд▓реА рд╕рднреА рдЪреАрдЬреЛрдВ рдореЗрдВ рдЪрд╛рдмрд┐рдпрд╛рдВ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИрдВред (рдЪреВрдВрдХрд┐ рдЖрдк рдЗрд╕ рд╢рдмреНрджрд╛рд╡рд▓реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рд╣рдорд╛рд░рд╛ Contains.Key
рд╕рд┐рдВрдЯреИрдХреНрд╕ рдорджрджрдЧрд╛рд░ рд▓рдЧреЗ? рдХреНрдпрд╛ рд╣рдо рдЗрд╕реЗ рд╕реБрдзрд╛рд░ рд╕рдХрддреЗ рд╣реИрдВ?)
рдЖрдк рдпрд╣рд╛рдВ рдЬреЛ рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ, рдЙрд╕рдХреЗ рдЕрд▓рд╛рд╡рд╛ рдХреЛрдИ рдкреНрд░рдЧрддрд┐ рдирд╣реАрдВ рд╣реБрдИ рд╣реИред рд╣рдореЗрдВ рдПрдХ рдкреНрд░рд╕реНрддрд╛рд╡ рдЪрд╛рд╣рд┐рдПред рд╡рд╣рд╛рдВ рдХреБрдЫ рдбрд╛рд▓рдиреЗ рдХреЗ рд▓рд┐рдП, рдореЗрд░рд╛ рд╡рд░реНрддрдорд╛рди рдкрд╕рдВрджреАрджрд╛ Has.Item(params object[] indexerArgs)
рдЬреЛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧрд╛ рдЪрд╛рд╣реЗ рдЙрд╕рдХрд╛ рдирд╛рдо рдХреБрдЫ рднреА рд╣реЛред
рдХреНрдпрд╛ рдпрд╣ рд╕рдм рдХреБрдЫ рдЕрдм рддрдХ рдЕрдиреБрд░реЛрдз рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛?
+1
@ nunit/рдврд╛рдВрдЪрд╛-рдЯреАрдо рдХреНрдпрд╛ рдЖрдк рдирд┐рдореНрди рдирдП API рдХрд╛ рд╕рдорд░реНрдерди рдХрд░реЗрдВрдЧреЗ?
namespace NUnit.Framework
{
public abstract class Has
{
public static ResolvableConstraintExpression Property(string name);
+ public static ResolvableConstraintExpression Item(params object[] indexerArgs);
}
}
namespace NUnit.Framework.Constraints
{
public class ConstraintExpression
{
public ResolvableConstraintExpression Property(string name);
+ public ResolvableConstraintExpression Item(params object[] indexerArgs);
}
}
рдореИрдВ рд╢рд╛рдпрдж IndexerConstraint
рдХрдХреНрд╖рд╛ рдХреЛ рддрдм рддрдХ рдЖрдВрддрд░рд┐рдХ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛ рдЬрдм рддрдХ рдХрд┐ рдЗрд╕реЗ рдПрдкреАрдЖрдИ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдХреЛрдИ рдХрд╛рд░рдг рди рд╣реЛред
рдореБрдЭреЗ рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред
рдкрдХреНрд╖ рдореЗрдВ рдПрдХ рдФрд░ рд╡реЛрдЯ, рдореИрдВ рд╕рд┐рд░реНрдл рдЗрд╕ рд╕реБрд╡рд┐рдзрд╛ рдХреЛ рдХрдВрд╕реЛрд▓ рдЯреЗрд╕реНрдЯ рдХреЗ рд▓рд┐рдП рдЪрд╛рд╣рддрд╛ рдерд╛ред ЁЯЩВ
@jnm2 рдХреНрдпрд╛ рдпрд╣ рд╕рдорд╕реНрдпрд╛ рдЕрднреА рднреА рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬреЛ рдЯреАрдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреА рд╣реИ?
рдореЗрд░реЗ рдкрд╛рд╕ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХ рддреНрд╡рд░рд┐рдд squiz рдерд╛ рдФрд░ рдЬреИрд╕рд╛ рдХрд┐ рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдирд╣реАрдВ рдЖрддрд╛ рдХрд┐ рд╕рдорд░реНрдерд┐рдд рдПрдкреАрдЖрдИ рдЬреИрд╕рд╛ рджрд┐рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП - рдХреНрдпрд╛ рдпрд╣ рд╣реИ:
/// obj from the initial post example
Assert.That(obj, Has.Item("TEST1").EqualTo(1).And.Item("TEST2").EqualTo(2));
рдпрд╛ рдпрд╣ рд╣реИ:
Assert.That(obj, Has.Item("TEST1", 1).And.Item("TEST2", 2));
?
рдЖрдк рдЙрджрд╛рд╣рд░рдг params object[]
рд▓реЗрддреЗ рд╣реИрдВ
рдСрдкреНрдЯ рдорд╛рдирддреЗ рд╣реБрдПред 2, рдХреНрдпрд╛ рд╕рд░рдгреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреА рдЬреИрд╕реЗ рдХрд┐ рдХреЗрд╡рд▓ рдПрдХ рд╡рд╕реНрддреБ рдкреНрд░рджрд╛рди рдХреА рдЧрдИ рд╣реЛ, рджрд╛рд╡рд╛ рдХрд░реЗрдВ рдХрд┐ рдХреБрдВрдЬреА рдореМрдЬреВрдж рд╣реИ, 2 рдкреИрд░рд╛рдореАрдЯрд░ - рдХреБрдВрдЬреА рдФрд░ рдорд╛рди? рдЕрдиреНрдп рд╕рдВрдпреЛрдЬрди (рдЕрдзрд┐рдХ рдпрд╛ рдХрдо рдЕрдкреЗрдХреНрд╖рд┐рдд рдкреИрд░рд╛рдореАрдЯрд░), рд╡рд┐рдлрд▓?
@Poimen рд╣рд╛рдБ, рдФрд░ рд╣рдо рдорджрдж рдХреА рд╕рд░рд╛рд╣рдирд╛ рдХрд░реЗрдВрдЧреЗ!
рд╕рд░рдгреА рдЖрд╡рд╢реНрдпрдХ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рддрд░реНрдХ рд▓реЗ рд╕рдХрддреА рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП:
public string this[int x] => "First indexer";
public string this[string x] => "Second indexer";
public string this[int x, int y] => "Third indexer";
рдЖрдк Has.Item(42).EqualTo("First indexer")
, Has.Item("42").EqualTo("Second indexer")
, рдФрд░ Has.Item(1, 2).EqualTo("Third indexer")
ред
рджреЗрдЦрд┐рдП, рдЖрдк рд╣рд░ рджрд┐рди рдХреБрдЫ рдирдпрд╛ рд╕реАрдЦрддреЗ рд╣реИрдВ - рдореИрдВрдиреЗ рдорд╛рди рд▓рд┐рдпрд╛ рдерд╛ рдХрд┐ рдпрд╣ рдПрдХ рдЯрд╛рдЗрдкреЛ рдерд╛, рдЙрдлрд╝: рджреЗрдЦреЗрдВ_рдиреЛ_рдПрд╡рд┐рд▓: рдореБрдЭреЗ рдкрд╣рд▓реЗ рдорд▓реНрдЯреА-рдХреА рдЗрдВрдбреЗрдХреНрд╕рд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдЖрдирдВрдж рдирд╣реАрдВ рдорд┐рд▓рд╛ рд╣реИ ...
рдареАрдХ рд╣реИ, рдмрдврд╝рд┐рдпрд╛, рдореИрдВ рдЗрд╕ рд╕рдкреНрддрд╛рд╣ рдХреБрдЫ рдПрдХ рд╕рд╛рде рд░рдЦрдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░реВрдБрдЧреАред
@ jnm2 рдореИрдВрдиреЗ рдЗрд╕ рдореБрджреНрджреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдмрдирд╛рдпрд╛ рд╣реИред
рдореЗрд░реЗ рдкрд╛рд╕ рдЬреЛ рдПрдХ рдЪрд┐рдВрддрд╛ рд╣реИ рд╡рд╣ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рд╣реИ рдЬреЛ рдХреЛрдб рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдорд┐рдд рд╣реЛрддрд╛ рд╣реИ:
Has.Item(42)
рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдереЛрдбрд╝рд╛ "рд╣реИрдХреА" рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╣рд▓ рдХрд░рдиреЗ рдХрд╛ рд╕рдмрд╕реЗ рд╕рд╛рдл рддрд░реАрдХрд╛ рдХреНрдпрд╛ рд╣реИред "рд╣реИрдХ" рд╣реИ:
https://github.com/nunit/nunit/pull/3609/commits/96154ca6402c692cec5e0ae6947f9922e72799fe#diff -ceeee4b8399633f181b6bccd5a39eb32R72
@Poimen рдХреНрд╖рдорд╛ рдХрд░реЗрдВ, рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реИ рдХрд┐ рдЖрдкрдХрд╛ рдХреНрдпрд╛ рдорддрд▓рдм рд╣реИред рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреНрдпрд╛ рд╕рдВрджреЗрд╢ рд╣реИ, рдФрд░ рдЖрдк рдЗрд╕реЗ рдХреНрдпрд╛ рдмрдирд╛рдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ? рдпрд╛ рдЖрдк рд╕реБрдЭрд╛рд╡ рдвреВрдВрдв рд░рд╣реЗ рд╣реИрдВ?
@ jnm2 рдкреНрд░рдХрдЯ
Expected: indexer [System.Int32]
But was: "not found"
рдЬрд┐рд╕ рддрд░рд╣ рд╕реЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдмрдирддреЗ рд╣реИрдВ StringifyArguments
рдлрд╝рдВрдХреНрд╢рди рдереЛрдбрд╝рд╛ "рд╣реИрдХреА" рд╣реИред
рддреЛ рдореЗрд░рд╛ рдмреБрд░реА рддрд░рд╣ рд╕реЗ рд╡реНрдпрдХреНрдд рдкреНрд░рд╢реНрди рдЕрдзрд┐рдХ рд╣реИ рдпрджрд┐ рд╡рд╛рдВрдЫрд┐рдд рд╕рдВрджреЗрд╢ рдЖрдЙрдЯрдкреБрдЯ рдмрдирд╛рдиреЗ рдХрд╛ рдПрдХ рдХреНрд▓реАрдирд░ рддрд░реАрдХрд╛ рдерд╛ред
@ jnm2 рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВрдиреЗ рд╕рдореАрдХреНрд╖рд╛ рдкрд░ рдЯрд┐рдкреНрдкрдгрд┐рдпреЛрдВ рдХреЛ рд╕рдВрдмреЛрдзрд┐рдд рдХрд┐рдпрд╛ рд╣реИ (рдЙрдирдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж)ред рд▓реЗрдмрд▓ рдХрд╣рддрд╛ рд╣реИ awaiting:contributor
ред
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ рдХреБрдЫ рдФрд░ рд╣реИ рдЬреЛ рдореБрдЭреЗ рдЖрдкрдХреЛ рдпрд╣ рдмрддрд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд░рдиреЗ рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИ рдХрд┐ рдореИрдВ "рд╣реЛ рдЧрдпрд╛": +1:
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм Has.Property
рдХреЛ рдХреЛрдИ рдкреНрд░реЙрдкрд░реНрдЯреА рдирд╣реАрдВ рдорд┐рд▓ рд░рд╣реА рд╣реИ, рддреЛ рд╣рдореЗрдВ рдЙрд╕ рд╕рдВрджреЗрд╢ рдХреЗ рдЬрд┐рддрдирд╛ рд╕рдВрднрд╡ рд╣реЛ рдЙрддрдирд╛ рдХрд░реАрдм рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред рдлрд┐рд░ рд╣рдореЗрдВ property
рдХреЛ default indexer
рд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдирд╛рдо рдХреЛ accepting arguments [42]
рдпрд╛ рдРрд╕рд╛ рдХреБрдЫ рд╕реЗ рдмрджрд▓рдирд╛ рдЪрд╛рд╣рд┐рдПред рдореИрдВ рдпрд╣ рд╕реЛрдЪрдиреЗ рдХреА рдУрд░ рдЭреБрдХрддрд╛ рд╣реВрдВ рдХрд┐ рд╣рдореЗрдВ рддрд░реНрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреЛ рд╕реВрдЪреАрдмрджреНрдз рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рддрд░реНрдХ рдорд╛рди рджрд┐рдЦрд╛рдиреЗ рдХреЗ рд▓рд┐рдП MsgUtils.FormatCollection
рдЬреИрд╕реЗ рдореМрдЬреВрджрд╛ рд╕реНрд╡рд░реВрдкрдг рд╕рд╣рд╛рдпрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рддрд░реНрдХреЛрдВ рдореЗрдВ рд╕реЗ рдПрдХ рд╢реВрдиреНрдп рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдХрдИ рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░ рд╕рдХрддрд╛ рд╣реИред
рдирд╣реАрдВ, рдпрд╣ рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд╣реИ! рдкреАрдЖрд░ рдереНрд░реЗрдб рдореЗрдВ рдареАрдХ рдЙрд╕реА рддрд░рд╣ рдХреА рдПрдХ рдЯрд┐рдкреНрдкрдгреА рдЖрджрд░реНрд╢ рд╣реЛрдЧреАред
рджрд╛рд╡реЗ рдХреЛ рджреЗрдЦрддреЗ рд╣реБрдП:
```рд╕реА#
Assert.that (рдкрд░реАрдХреНрд╖рдХ, Has.Item ("рд╡рд╛рд╣"));
It producers the message:
рдЕрдкреЗрдХреНрд╖рд┐рдд: рдбрд┐рдлреЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ <
рд▓реЗрдХрд┐рди рдерд╛: "рдирд╣реАрдВ рдорд┐рд▓рд╛"
Given the assertion:
```c#
Assert.That(tester, Has.Item("wow").EqualTo(1));
рдпрд╣ рд╕рдВрджреЗрд╢реЛрдВ рдХреЛ рдкреНрд░реЛрдбреНрдпреВрд╕ рдХрд░рддрд╛ рд╣реИ:
Default indexer accepting arguments < "wow" > was not found on NUnit.Framework.Constraints.IndexerConstraintTests+NamedIndexTester.
рдпрд╣ MsgUtils.FormatCollection
рдлрд╝рдВрдХреНрд╢рди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдЙрддреНрдкрдиреНрди рд╣реБрдЖред
рддреЛ рдЕрддрд┐рд░рд┐рдХреНрдд рд╡рд┐рд╡рд░рдг рдХреЗ рд╕рд╛рде рд╕рдВрдкрддреНрддрд┐ рд╕рдВрджреЗрд╢реЛрдВ рд╕реЗ рднреА рдЕрдзрд┐рдХ рдирд┐рдХрдЯрддрд╛ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
рдореБрдЭреЗ рджреВрд╕рд░рд╛ рдорд╛рдорд▓рд╛ рдмрд╣реБрдд рдкрд╕рдВрдж рд╣реИред рдкрд╣рд▓рд╛ рдорд╛рдорд▓рд╛ рдЕрднреА рднреА рдореЗрд░реЗ рд▓рд┐рдП рдЕрд░реНрдердкреВрд░реНрдг рд░реВрдк рд╕реЗ рдЧрд▓рдд рд▓рдЧрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рддрд░реНрдХ рдорд╛рдиреЛрдВ рдХреЗ рдмрдЬрд╛рдп рддрд░реНрдХ рдкреНрд░рдХрд╛рд░ рджрд┐рдЦрд╛рддрд╛ рд╣реИред рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдХреЗрд╡рд▓ рддрд░реНрдХ рдорд╛рди рд╣реИрдВ, рдФрд░ рдкреНрд░рддреНрдпреЗрдХ рддрд░реНрдХ рдорд╛рди рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдореЗрдВ рддрд░реНрдХ рдкреНрд░рдХрд╛рд░реЛрдВ рдХреА рд╢реНрд░реЗрдгреА рд╕реЗ рдореЗрд▓ рдЦрд╛ рд╕рдХрддрд╛ рд╣реИред рдпрд╣ рджрд┐рдЦрд╛рдирд╛ рднреНрд░рд╛рдордХ рд╣реИ рдХрд┐ System.String
рддрд░реНрдХ рдХреЗ рд╕рд╛рде рдПрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдХреНрдпреЛрдВрдХрд┐ IEnumerable<char>
рддрд░реНрдХ рдареАрдХ рд╡реИрд╕реЗ рд╣реА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред
IEnumerable<char>
рдПрдХ рдирд┐рд░рд╛рд▓рд╛ рдЙрдкрдпреЛрдЧ рдХрд╛ рдорд╛рдорд▓рд╛ рд╣реИ ... рд▓реЗрдХрд┐рди рдирд┐рд╢реНрдЪрд┐рдд рд░реВрдк рд╕реЗ, рдореБрдЭреЗ рдпрд╣ рдмрд╛рдд рд╕рдордЭ рдореЗрдВ рдЖ рдЧрдИ рд╣реИред
рддреЛ, рд╡рд╛рдкрд╕ - рджрд┐рдпрд╛ рдЧрдпрд╛:
```рд╕реА#
Assert.that (рдкрд░реАрдХреНрд╖рдХ, Has.Item ("рд╡рд╛рд╣"));
producers the message:
рдЕрдкреЗрдХреНрд╖рд┐рдд: рдбрд┐рдлреЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рддрд╛ рд╣реИ < "рд╡рд╛рд╣" >
рд▓реЗрдХрд┐рди рдерд╛: "рдирд╣реАрдВ рдорд┐рд▓рд╛"
For numbers it goes into the usual suffix - given:
```c#
Assert.That(tester, Has.Item(42d));
рдирд┐рд░реНрдорд╛рддрд╛:
Expected: Default indexer accepting arguments < 42.0d >
But was: "not found"
'рдЕрдкреЗрдХреНрд╖рд┐рдд' рд╕рдВрджреЗрд╢ рдореБрдЭреЗ рддрдм рдмрд╣реБрдд рдЕрдЪреНрдЫрд╛ рд▓рдЧрддрд╛ рд╣реИред But was: "not found"
рд╕рдВрджреЗрд╢ рдереЛрдбрд╝рд╛ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдЬреИрд╕реЗ рдпрд╣ рд╕рд╛рдордЧреНрд░реА рдХреЗ рд╕рд╛рде рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХрд░ рд░рд╣рд╛ рд╣реИ not found
, рд▓реЗрдХрд┐рди рдЕрдЧрд░ PropertyConstraint рдЙрд╕реА рддрд░рд╣ рд╡реНрдпрд╡рд╣рд╛рд░ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдЙрдиреНрд╣реЗрдВ рд╡рд╣реА рд░рдЦрдирд╛ рдореЗрд░реЗ рд▓рд┐рдП рдмреЗрд╣рддрд░ рд╣реИред рдкреНрд░реЙрдкрд░реНрдЯреА рдХреЙрдиреНрд╕реНрдЯреНрд░реЗрди рдмрджрд▓рдирд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдЗрд╕ рдкреАрдЖрд░ рдХреЗ рджрд╛рдпрд░реЗ рд╕реЗ рдмрд╛рд╣рд░ рд╣реЛрдЧрд╛ред рдпрджрд┐ рдЖрдк рдЪрд╛рд╣реЗрдВ рддреЛ рд╣рдо рдЕрднреА рднреА рдмрджрд▓рд╛рд╡ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдореИрдВрдиреЗ рдФрд░ рдлреНрд░реЗрдорд╡рд░реНрдХ рдЯреАрдо рдореЗрдВ рдХрд┐рд╕реА рдФрд░ рдиреЗ рдмрджрд▓рд╛рд╡ рдХреЛ рдареАрдХ рдХрд┐рдпрд╛ рд╣реИред
рд╣рд╛рдБ, рдореИрдВ рдЗрд╕реЗ рдРрд╕рд╛ рдирд╣реАрдВ рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рдерд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рддреНрд░реБрдЯрд┐ рд╕рдВрджреЗрд╢ рдХреЗ рд╕рд╛рде рдХреЛрдИ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдорд┐рд▓рд╛ред рдореБрдЭреЗ рдпрд╣ рдкрд╕рдВрдж рдЖрдпрд╛ рд╣реЛрдЧрд╛:
But was: not found
рд▓реЗрдХрд┐рди ConstraintResult
рдХреА рд╡рд╛рдкрд╕реА рд╡рд╣рд╛рдВ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдХреЛрдЯреНрд╕ рдбрд╛рд▓ рд░рд╣реА рд╣реИред
рд╕рдВрджрд░реНрдн рдХреЗ рд▓рд┐рдП рд╕рдВрдкрддреНрддрд┐ рд╕рдВрд╕реНрдХрд░рдг:
```рд╕реА#
Assert.that (рдкрд░реАрдХреНрд╖рдХ, Has.Property ("NoItDoesNotHaveThis"));
produces:
рдЕрдкреЗрдХреНрд╖рд┐рдд: рд╕рдВрдкрддреНрддрд┐ NoItDoesNotHaveThis
рдордЧрд░ рдерд╛:
```
рддреЛ рдХреЛрдИ рдЙрджреНрдзрд░рдг рдирд╣реАрдВ рд╣реИ - рд▓реЗрдХрд┐рди рдпрд╣ рдкреНрд░рдХрд╛рд░ рджреЗрддрд╛ рд╣реИ - рдорд╛рди рдирд╣реАрдВред
рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рдерд╛ рдХрд┐ ConstraintResult
рдХрд╛ рдЕрдзрд┐рднрд╛рд░ рд▓реМрдЯрд╛рдирд╛ рдПрдХ рд╕рдорд╛рдзрд╛рди рд╣реЛрдЧрд╛?
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд▓рд┐рдП PropertyConstraint рдХреНрдпрд╛ рдХрд░ рд░рд╣рд╛ рд╣реИ, рдЗрд╕рдХреЗ рд╕рд╛рде рд╣рдореЗрдВ рд░рд╣рдирд╛ рдЪрд╛рд╣рд┐рдПред actual
рдорд╛рди рдХреНрдпрд╛ рд╣реИ рдЗрд╕рдХрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдкреНрд░рддрд┐рдирд┐рдзрд┐рддреНрд╡ рджрд┐рдЦрд╛рдирд╛ рд╕рдмрд╕реЗ рдмреБрд░реА рдмрд╛рдд рдирд╣реАрдВ рд╣реИ рдЬрдм рд╕рдВрджреЗрд╢ рдХрд╣ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдЬреЛ рд╡рд┐рдлрд▓ рд░рд╣рд╛ рд╡рд╣ рд╕рдВрдкрддреНрддрд┐ рдвреВрдВрдв рд░рд╣рд╛ рдерд╛ред
ConstraintResult рд╕реЗ рд╡реНрдпреБрддреНрдкрдиреНрди рдПрдХ рдирдпрд╛ рд╡рд░реНрдЧ рд▓реМрдЯрд╛рдирд╛ рдпрд╣ рд╣реИ рдХрд┐ рдЕрдиреНрдп рдмрд╛рдзрд╛рдПрдВ рдЗрд╕реЗ рдХреИрд╕реЗ рдЕрдиреБрдХреВрд▓рд┐рдд рдХрд░рддреА рд╣реИрдВ, рд╣рд╛рдВред
рдареАрдХ рд╣реИ, рдмрдврд╝рд┐рдпрд╛ - рд▓рдЧрддрд╛ рд╣реИ - рджрд┐рдпрд╛ рдЧрдпрд╛:
```рд╕реА#
рдЬреЛрд░ рджреЗрдВред рд╡рд╣ (рдкрд░реАрдХреНрд╖рдХ, рд╣реИред рдЖрдЗрдЯрдо (42 рдбреА));
producers:
рдЕрдкреЗрдХреНрд╖рд┐рдд: рддрд░реНрдХреЛрдВ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ < 42.0d >
рдордЧрд░ рдерд╛:
```
рдпрд╣ рд╕рдВрдкрддреНрддрд┐ рдмрд╛рдзрд╛ рд╕рдВрджреЗрд╢ рд╕реЗ рдореЗрд▓ рдЦрд╛рддрд╛ рд╣реИред
@ nunit/рдврд╛рдВрдЪреЗ-рдЯреАрдо рдФрд░ рд╕рднреА, рдореИрдВ рдЗрд╕ рдкреНрд░рд╢реНрди рдкрд░ рд╢реАрдШреНрд░ рд╕рдорд╛рдзрд╛рди рдХреА рдЙрдореНрдореАрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ @Poimen рдХрд╛ рдЙрддреНрдХреГрд╖реНрдЯ рдкреАрдЖрд░ (https://github.com/nunit/nunit/pull/3609) рдЕрдиреНрдпрдерд╛ рд╡рд┐рд▓рдп рдХреЗ рд▓рд┐рдП рддреИрдпрд╛рд░ рд╣реИред
@Dreamescaper рдиреЗ рдореЗрд░реЗ рдзреНрдпрд╛рди рдореЗрдВ рдореЗрд░реА рдЪрд┐рдВрддрд╛ рдХреЛ рдЗрд╕ рдзрд╛рдЧреЗ рдореЗрдВ рдКрдкрд░ рд▓рд╛рдпрд╛ рдХрд┐ рдореИрдВрдиреЗ рдЯреНрд░реИрдХ рдЦреЛ рджрд┐рдпрд╛: рдореБрдЭреЗ рдбрд░ рд╣реИ рдХрд┐ рд▓реЛрдЧ Assert.That(collection, Has.Item("x"));
рд▓рд┐рдЦреЗрдВрдЧреЗ рдФрд░ рдкрдврд╝реЗрдВрдЧреЗ рдпрд╣ рд╕реЛрдЪрдХрд░ рдХрд┐ Has.Item
рдЕрд░реНрде Contains.Item
.
рд╣рдо рд╡рд┐рдлрд▓рддрд╛ рд╕рдВрджреЗрд╢ рдореЗрдВ рдХреБрдЫ рдЬреЛрдбрд╝рдиреЗ рдкрд░ рд╡рд┐рдЪрд╛рд░ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЗрд╕рд╕реЗ рд╕реНрд░реЛрдд рдХреЛрдб рдореЗрдВ Has.Item
рдкрдврд╝рддреЗ рд╕рдордп рдЗрд╕реЗ рдареАрдХ рд╕реЗ рд╕рдордЭрдиреЗ рдХреА рд╕рдорд╕реНрдпрд╛ рдореЗрдВ рдорджрдж рдирд╣реАрдВ рдорд┐рд▓реЗрдЧреА:
Expected: Default indexer accepting arguments < 42.0d > (Did you mean to use Contains.Item?)
рджреВрд╕рд░реА рдУрд░, рдореБрдЭреЗ Has.Index(42)
рдпрд╛ Has.Index(42).EqualTo(43)
рд╣реИ рдЬреЛ рдореИрдВрдиреЗ Item
рдмрдЬрд╛рдп рд╕реБрдЭрд╛рдпрд╛ рдерд╛ред рдЙрджрд╛рд╣рд░рдг рдХреЗ рдПрдХ рд╕реВрдЪрдХрд╛рдВрдХ рдореЗрдВ рдПрдХ рдЖрдЗрдЯрдо рд╣реИред рдЖрдк рдпрд╣ рдирд╣реАрдВ рдХрд╣реЗрдВрдЧреЗ рдХрд┐ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рд╣реИ рдФрд░ рдпрд╣ рдЗрдВрдбреЗрдХреНрд╕ 43 рдХреЗ рдмрд░рд╛рдмрд░ рд╣реИред рдЗрдВрдбреЗрдХреНрд╕ рд╡рд╣ рдЪреАрдЬ рд╣реИ рдЬрд┐рд╕реЗ рдЖрдк рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, 42ред
Has.Item
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред рд╕реНрд░реЛрдд рдХреЛрдб рдкрдврд╝рддреЗ рд╕рдордп рд╣реЛрдиреЗ рд╡рд╛рд▓реА рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдЫреЛрдбрд╝ рджреЗрдВред рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╕реНрд░реЛрдд рдХреЛрдб рд▓рд┐рдЦрддреЗ рд╕рдордп рдорджрдж рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдиреНрдпреВрдиреАрдХрд░рдг рдЬреЛрдбрд╝реЗрдВ, рдЬреИрд╕реЗ XML рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдФрд░ рд╡рд┐рдлрд▓рддрд╛ рд╕рдВрджреЗрд╢реЛрдВ рдореЗрдВ рдпреБрдХреНрддрд┐рдпрд╛рдБредHas.Index
рдХрд╛ рдкреНрд░рдпреЛрдЧ рдХрд░реЗрдВредHas.ItemAt
рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВред Has.ItemAt(42).EqualTo(43)
редрд░реБрдХреЛ, рдореБрдЭреЗ рдЖрдЦрд┐рд░реА рд╕реБрдЭрд╛рд╡ рд╕реЗ рдкреНрдпрд╛рд░ рд╣реЛ рдЧрдпрд╛ рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕рдореЗрдВ LINQ ElementAt рд╡рд┐рдзрд┐ рдХреЗ рд╕рдорд╛рдирд╛рдВрддрд░ рд╣реИ рдЬрд┐рд╕реЗ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕ рджрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдПрдХ рдЖрдЗрдЯрдо рджреЗрддрд╛ рд╣реИред
рдХреНрдпрд╛ рд╣рд░ рдХреЛрдИ Has.ItemAt
рдЦреБрд╢ рд╣реИ? рд╕реБрдЭрд╛рд╡реЛрдВ рдХрд╛ рд╕реНрд╡рд╛рдЧрдд рд╣реИ рд▓реЗрдХрд┐рди рдлрд┐рд░ рд╕реЗ рдореИрдВ рдЙрд╕ рд╕рдордп рдХрд╛ рд╕рдореНрдорд╛рди рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ @Poimen рдиреЗ рдкрд╣рд▓реЗ рд╣реА рд╕рдорд░реНрдкрд┐рдд рдХрд░ рджрд┐рдпрд╛ рд╣реИред
Has.ItemAt
рд▓рд┐рдП +1 :)
рдореИрдВ рдЖрдкрд╕реЗ рд╕рд╣рдордд рд╣реВрдВ рдХрд┐ Has.Item
рд╕рдВрднрд╛рд╡рд┐рдд рд░реВрдк рд╕реЗ рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИред рдореБрдЭреЗ Has.ItemAt
рдкрд╕рдВрдж рд╣реИ рд▓реЗрдХрд┐рди рдЪреВрдВрдХрд┐ рдЖрдкрдХреЛ LINQ рд╕рд┐рдВрдЯреИрдХреНрд╕ рдкрд╕рдВрдж рд╣реИ, рдЗрд╕рд▓рд┐рдП Has.ElementAt
рдЙрдкрдпреЛрдЧ рдХреНрдпреЛрдВ рди рдХрд░реЗрдВ?
рдореИрдВ ElementAt рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдкреНрд░рддреНрдпрдХреНрд╖ рд╕рдордХрдХреНрд╖ рдирд╣реАрдВ рд╣реИред
рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП Dictionary<string,string>
LINQ рдХрд╛ ElementAt(0) рдкрд╣рд▓реА рдЬреЛрдбрд╝реА рд▓реМрдЯрд╛рдПрдЧрд╛, рдФрд░ Has.ItemTo(0).EqualTo("...") рд╡рд┐рдлрд▓ рд╣реЛ рдЬрд╛рдПрдЧрд╛, рдХреНрдпреЛрдВрдХрд┐ рдкреВрд░реНрдгрд╛рдВрдХ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рдХреЛрдИ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдирд╣реАрдВ рд╣реИред
@CharliePoole рдпрд╣ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ рд╣реИред рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕реЗ рдЦреЛрдЬрдирд╛ рдЙрддрдирд╛ рд╕рд╣рдЬ рдирд╣реАрдВ рд╣реЛрдЧрд╛, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рдкрддрд╛ рдХрд┐ рдореБрдЭреЗ рдРрд╕рд╛ рдХреНрдпреЛрдВ рд▓рдЧрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдореИрдВ Item
рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╣рдо рдХрд┐рд╕реА рдкреНрд░рдХрд╛рд░ рдХреЗ рд╕рдВрдЧреНрд░рд╣/рд╢рдмреНрджрдХреЛрд╢/рд▓реБрдХрдЕрдк рдкрд░ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХреЛ рдХреЙрд▓ рдХрд░реЗрдВрдЧреЗ, рдЬрдмрдХрд┐ ElementAt
рдХрд╛ рдЙрджреНрджреЗрд╢реНрдп рдкреНрд░рд╢реНрдиреЛрдВ рдФрд░ рдЕрдиреНрдп рдЧрдгрдирд╛рдУрдВ рдореЗрдВ рдХрд╛рдо рдХрд░рдирд╛ рд╣реИ рдЬреЛ рдЖрд╡рд╢реНрдпрдХ рд░реВрдк рд╕реЗ рд╕рдВрдЧреНрд░рд╣ рдирд╣реАрдВ рд╣реИрдВ . рд╕рдВрдЧреНрд░рд╣ рддрддреНрд╡реЛрдВ рдХреЛ рдЖрдорддреМрд░ рдкрд░ рдЖрдЗрдЯрдо рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИред
@Dreamescaper рдХреНрдпрд╛ рдЖрдкрдХреЛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ Has.ItemAt(4)
рд▓реЛрдЧреЛрдВ рдХреЛ рдпрд╣ рд╕реЛрдЪрдиреЗ рдкрд░ рдордЬрдмреВрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ ElementAt
рддрд░рд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдПрдХ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХреЛ рдХреЙрд▓ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЧрдгрдирд╛?
@jnm2
рдпрд╣ рд╢рд╛рдпрдж рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрдХ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рдирд╣реАрдВ рдкрддрд╛ (рдФрд░ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдЕрднреА рднреА Has.Item рд╕реЗ рдмреЗрд╣рддрд░ рд╡рд┐рдХрд▓реНрдк рд╣реИ)ред
@ jnm2 рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдереЛрдбрд╝рд╛ рднреНрд░рдорд┐рдд рд╣реВрдБред рдпрд╣ рдореБрджреНрджрд╛ рдЧреБрдгреЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╢реБрд░реВ рд╣реБрдЖ рдФрд░ рдЕрднреА рднреА рдЗрд╕рдХрд╛ рд╢реАрд░реНрд╖рдХ рд╣реИред Has.Property рдФрд░ Has.ItemAt рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреА рдирдЬрд╝рд░ рдореЗрдВ рдПрдХ рджреВрд╕рд░реЗ рд╕реЗ рдХреИрд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рдпрд╛ рдмрд╛рддрдЪреАрдд рдпрд╛ рддреБрд▓рдирд╛ рдХрд░реЗрдВрдЧреЗ?
[рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реИ рдХрд┐ рдЧреБрдгреЛрдВ рдФрд░ рд╕рдВрдЧреНрд░рд╣ рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдЕрдореВрд░реНрддрддрд╛ рдХреЗ рдПрдХ рдирд┐рд╢реНрдЪрд┐рдд рд╕реНрддрд░ рдкрд░ рд╕рдордХрдХреНрд╖ рдорд╛рдирд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдирд╣реАрдВ рд▓рдЧрддрд╛ рдХрд┐ рдпрд╣ рдЕрдореВрд░реНрддрддрд╛ рдХрд╛ рд╕реНрддрд░ рд╣реИ рдЬрд┐рд╕ рдкрд░ рд╣рдо рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдЖрдорддреМрд░ рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВред :рд╕реНрдорд╛рдЗрд▓рд┐рдВрдЧ_рдЗрдореНрдк: ]
рдПрдХ рдПрдирдпреВрдиреАрдЯ 4.0 рдЪреАрдЬ рдХреЗ рд░реВрдк рдореЗрдВ, рдПрдкреАрдЖрдИ рдореЗрдВ рд╢рдмреНрджреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХреИрд╕реЗ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рдереЛрдбрд╝рд╛ рд╕рд╛ рд╕рд╛рдл рдХрд░рдирд╛ рдЕрдЪреНрдЫрд╛ рд╣реЛрддрд╛ рд╣реИред рд╢рдмреНрдж "рд╕рджрд╕реНрдп" рд╡рд╣ рд╣реИ рдЬрд┐рд╕реЗ рдЕрдХреНрд╕рд░ "рдЖрдЗрдЯрдо" рдХреЗ рд╕рдорддреБрд▓реНрдп рдХреЗ рд░реВрдк рдореЗрдВ рдкреНрд░рдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдЗрд╕рдХрд╛ рдЕрд░реНрде рд╕рдВрдкрддреНрддрд┐, рд╡рд┐рдзрд┐ рдпрд╛ рдЪрд░ рднреА рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
рдореИрдВ рдЖрдВрд╢рд┐рдХ рд░реВрдк рд╕реЗ ItemAt
рд╕реЗ рдЕрдзрд┐рдХ ElementAt
рд╕рд╛рде рд╕рдмрд╕реЗ рдЕрдзрд┐рдХ рд╕рд╣рдЬ рдорд╣рд╕реВрд╕ рдХрд░рддрд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧ рд╕рдХрддрд╛ рд╣реИ рдХрд┐ рд╣рдо Enumerable.ElementAt
рдХреЗ рд╕рдорд╛рди рд╡рд┐рд╢реЗрд╖ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреЛ рд╕реМрдВрдкрддреЗ рд╣реИрдВ рдпрд╛ рд▓реЗрддреЗ рд╣реИрдВред рдЬрд┐рд╕ рдЪреАрдЬ рдиреЗ рдореБрдЭреЗ ElementAt(int index)
рд╕рд╛рде рджреГрдврд╝рддрд╛ рд╕реЗ рдкреНрд░рднрд╛рд╡рд┐рдд рдХрд┐рдпрд╛ рд╡рд╣ рдпрд╣ рдерд╛ рдХрд┐ рдпрд╣ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЕрдзрд┐рдХ рддрдереНрдп рдпрд╣ рд╣реИ рдХрд┐ рдмреАрд╕реАрдПрд▓ рдореЗрдВ At
рдкреНрд░рддреНрдпрдп рдХреЗ рд▓рд┐рдП рдЙрджрд╛рд╣рд░рдг рд╣реИ, рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ index
рдирд╛рдордХ рдкреИрд░рд╛рдореАрдЯрд░ рд╕реЗ рдЬреБрдбрд╝рд╛ рд╣реБрдЖ рд╣реИ
рдпрджрд┐ рдЖрдк рдЗрд╕реЗ ILookup рдХреЗ рд╕рд╛рде рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ ILookup рдХреА рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдПрдХрд╛рдзрд┐рдХ TElements рд▓реМрдЯрд╛рддреА рд╣реИ, рдПрдХ рднреА рддрддреНрд╡/рд╡рд╕реНрддреБ рдирд╣реАрдВред Has.EntryAt
рдХреБрдЫ рдРрд╕рд╛ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдЬреЛ рд╕рдВрдЧреНрд░рд╣, рд╢рдмреНрджрдХреЛрд╢ рдФрд░ рдмрд╣реБ-рддрддреНрд╡-рдкреНрд░рддрд┐-рд╕реВрдЪрдХрд╛рдВрдХ рд▓реБрдХрдЕрдк рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред рдореЗрд░реА рдкреНрд░рд╛рд░рдВрднрд┐рдХ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдпрд╣ рд╣реИ рдХрд┐ Has.ItemAt
рдЬреЛ рдПрдХ ILookup рд╕реЗ IEnumerable<TElement>
рд▓реМрдЯрд╛рддрд╛ рд╣реИ, рд╢рд╛рдпрдж рдХрд╛рдлреА рд╕рдордЭ рдореЗрдВ рдЖрддрд╛
рдЖрдк рд╕рдм рдХреНрдпрд╛ рд╕реЛрдЪрддреЗ рд╣реИрдВ? рдпрд╣ рдХрдард┐рди рд╣реИ рдЬрдм рдЖрдк рдПрдХ рд╕реЗ рдЕрдзрд┐рдХ рдЪреАрдЬреЛрдВ рдХреЛ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдпрд╣рд╛рдВ рдмрд╣реБрдордд рд╡рд░реАрдпрддрд╛ рдпрд╣ рдЗрдВрдЧрд┐рдд рдХрд░рдиреЗ рдореЗрдВ рднреА рдорджрдж рдХрд░ рд╕рдХрддреА рд╣реИ рдХрд┐ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП рдХреМрди рд╕рд╛ рдирд╛рдо рд╕рдмрд╕реЗ рдЖрд╕рд╛рди рд╣реЛрдЧрд╛ред @ рдиреВрдирд┐рдЯ/рдлреНрд░реЗрдорд╡рд░реНрдХ-рдЯреАрдо рдХреЗ рдЕрд▓рд╛рд╡рд╛ рд▓реЛрдЧ, рдореЗрд░рд╛ рдорддрд▓рдм рдЖрдкрдХреЛ рдмрд╛рд╣рд░ рдХрд░рдирд╛ рдирд╣реАрдВ рдерд╛ред рдпрджрд┐ рдЖрдк рджреЗрдЦ рд░рд╣реЗ рд╣реИрдВ рдФрд░ рдЖрдкрдХреЗ рдкрд╛рд╕ рдПрдХ рдордЬрдмреВрдд рднрд╛рд╡рдирд╛ рд╣реИ, рддреЛ рдпрд╣ рдПрдХ рдбреЗрдЯрд╛ рдмрд┐рдВрджреБ рд╣реИ рдЬреЛ рд╣рдореЗрд╢рд╛ рд╕рд╣рд╛рдпрдХ рд╣реЛрддрд╛ рд╣реИ!
@CharliePoole Has.Property("X")
рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдореЗрдВ X
рдирд╛рдордХ рдПрдХ рдЧреИрд░-рдкреИрд░рд╛рдореАрдЯрд░рдпреБрдХреНрдд рд╕рдВрдкрддреНрддрд┐ рд╣реИред Has.ItemAt("X")
рдпрд╣ рджрд╛рд╡рд╛ рдХрд░реЗрдЧрд╛ рдХрд┐ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ (рдПрдХ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ, рдкреНрд░рд╕рд┐рджреНрдз рдирд╛рдо рд╡рд╛рд▓рд╛ рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░рдпреБрдХреНрдд рдЧреБрдг) рд╣реИ рдЬреЛ рдПрдХ рд╕реНрдЯреНрд░рд┐рдВрдЧ рдкреИрд░рд╛рдореАрдЯрд░ рдХреЛ рд╕реНрд╡реАрдХрд╛рд░ рдХрд░ рд╕рдХрддрд╛ рд╣реИред
Has.Property("X").EqualTo(3)
рдХрд╛ рджрд╛рд╡рд╛ рд╣реИ рдХрд┐ рдЙрджрд╛рд╣рд░рдг рдХреЗ рдПрдХ рдЧреИрд░ рдкреИрд░рд╛рдорд┐рдЯреНрд░реАрдХреГрдд рд╕рдВрдкрддреНрддрд┐ рдХрд╣рд╛ рдЬрд╛рддрд╛ рд╣реИ X
рдХрд┐ рд░рд┐рдЯрд░реНрди 3
рдЕрдЧрд░ рддреБрдо рдлреЛрди рдЕрдкрдиреЗ рдЧреИрд░ рдкреИрд░рд╛рдорд┐рдЯреНрд░реАрдХреГрдд get
рдПрдХреНрд╕реЗрд╕рд░ред Has.ItemAt("X").EqualTo(3)
рдпрд╣ рджрд╛рд╡рд╛ рдХрд░реЗрдЧрд╛ рдХрд┐ рдЗрдВрд╕реНрдЯреЗрдВрд╕ рдореЗрдВ рдПрдХ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ (рдПрдХ рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ, рдкреНрд░рд╕рд┐рджреНрдз рдирд╛рдо рдХреЗ рд╕рд╛рде рдПрдХ рдкреИрд░рд╛рдореАрдЯрд░рдпреБрдХреНрдд рд╕рдВрдкрддреНрддрд┐) рд╣реИ рдЬреЛ 3
рд▓реМрдЯрд╛рддрд╛ рд╣реИ рдпрджрд┐ рдЖрдк рд╡рд┐рд╢рд┐рд╖реНрдЯ рд╕реНрдЯреНрд░рд┐рдВрдЧ "X"
рдХреЛ рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ get
рдПрдХреНрд╕реЗрд╕рд░ред
рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХрд╛ рдирд╛рдо рдЕрдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ рдХрд┐ рд╕реА #, рд╡реАрдмреА рдФрд░ рдПрдл # рд╕рд┐рдВрдЯреИрдХреНрд╕ рд╕рднреА рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░реНрд╕ рдХреЛ рдХреЙрд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред (рдЗрд╕ рдкреНрд░рдХрд╛рд░ 'рдбрд┐рдлреЙрд▓реНрдЯ' рд╢рдмреНрдж) рдПрдХ рдРрд╕реА рднрд╛рд╖рд╛ рдЬрд┐рд╕рдореЗрдВ рдбрд┐рдлреЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░реНрд╕ рдХреА рдХреЛрдИ рдЕрд╡рдзрд╛рд░рдгрд╛ рдирд╣реАрдВ рдереА, рд▓реЗрдХрд┐рди рдирд╛рдорд┐рдд рдЗрдВрдбреЗрдХреНрд╕рд░реНрд╕ рдХреА рдЕрд╡рдзрд╛рд░рдгрд╛ рдереА, рдЙрд╕реЗ рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХрд╛ рдирд╛рдо рдЖрдорддреМрд░ рдкрд░ Item
, рд▓реЗрдХрд┐рди рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХреЛ рдХреБрдЫ рдордирдорд╛рдирд╛ рдирд╛рдо рджрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ рдФрд░ рдлрд┐рд░ рднреА рдбрд┐рдлрд╝реЙрд▓реНрдЯ рдЗрдВрдбреЗрдХреНрд╕рд░ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ рдХреНрдпреЛрдВрдХрд┐ рд╡реЗ рднрд╛рд╖рд╛рдПрдВ рдЕрднреА рднреА рдирд╛рдо рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд┐рдП рдмрд┐рдирд╛ рдЗрд╕реЗ рдХреЙрд▓ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдВрдЧреАред C# рдореЗрдВ, рдЖрдк рдЗрд╕реЗ [IndexerName("ArbitraryName")]
рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рдкреВрд░рд╛ рдХрд░реЗрдВрдЧреЗред
@ jnm2 рдореИрдВ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ
рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╕рдВрдкрддреНрддрд┐ рдХреЗ рдмреАрдЪ рднреНрд░рдо рдХреА рд╕рдВрднрд╛рд╡рдирд╛ рд╣реИ
рдореИрдВ рдЗрд╕ рдмрд╛рдд рдкрд░ рдЬреЛрд░ рджреЗрддрд╛ рд╣реВрдВ рдХрд┐ __you__ рднреНрд░рдорд┐рдд рдирд╣реАрдВ рд╣реЛрдЧрд╛ рдФрд░ рдореИрдВ рд╢рд╛рдпрдж рдХреЗрд╡рд▓ рдЖрдкрдХреЗ рд╕рд╛рде рдмрд╛рдд рдХрд░рддреЗ рд╕рдордп рд╣реЛрдиреЗ рдХрд╛ рджрд┐рдЦрд╛рд╡рд╛ рдХрд░реВрдВрдЧрд╛ (рдИрд╢реНрд╡рд░реАрдп рд╡рд┐рдзрд┐, y' рдкрддрд╛ рд╣реИ: рдкрд▓рдХ:) рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд╕рдВрджреЗрд╣ рд╣реИ рдХрд┐ рдХрдИ рдЗрд╕реЗ рднреНрд░рдорд┐рдд рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдФрд░ рдЖрдк рдЗрд╕реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рдордЭрд╛рдПрдВрдЧреЗред рдХрд╛рдлреАред
рдореИрдВ рдЬреЛрдбрд╝ рдХреЗ рдЦрд┐рд▓рд╛рдл рдирд╣реАрдВ рд╣реВрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЙрдкрд░реЛрдХреНрдд рднреЗрджреЛрдВ рдХреЛ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝реЛрдВ рдореЗрдВ рд▓рд┐рдЦрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдкреБрдирд╢реНрдЪ: рдореБрдЭреЗ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдмрд╣рд┐рд╖реНрдХреГрдд рдорд╣рд╕реВрд╕ рдирд╣реАрдВ рд╣реБрдЖред :рд╕реНрдорд╛рдЗрд▓реА:
@CharliePoole рдЕрдЪреНрдЫрд╛ рд╡рд┐рдЪрд╛рд░ред рдХреНрдпрд╛ рд╣рдо рдЙрд╕ рд╡рд┐рдЪрд╛рд░ рдХреЛ рддрдм рддрдХ рд╕реВрдЪреАрдмрджреНрдз рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬрдм рддрдХ рд╣рдо рдХрд┐рд╕реА рдирд╛рдо рдкрд░ рд╕рдордЭреМрддрд╛ рдирд╣реАрдВ рдХрд░ рд▓реЗрддреЗ, рдХреНрдпреЛрдВрдХрд┐ рдРрд╕рд╛ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ Has.ItemAt
/ Has.ElementAt
/ Has.EntryAt
/etc рдХреЗ рдмреАрдЪ рдХреЗ рдЪреБрдирд╛рд╡ рдХреЛ рдкреНрд░рднрд╛рд╡рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдЧрд╛? рдпрд╛ рдХреНрдпрд╛ рдХреЛрдИ рдРрд╕рд╛ рдмрд┐рдВрджреБ рд╣реИ рдЬрд┐рд╕рд╕реЗ рдореИрдВ рдЪреВрдХ рдЧрдпрд╛ рдФрд░ рдЖрдк рднреНрд░рдо рдХреА рдЗрд╕ рдХреНрд╖рдорддрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рдПрдХ рд╡рд┐рд╢реЗрд╖ рдирд╛рдордХрд░рдг рд╡рд┐рдХрд▓реНрдк рдХрд╛ рд╕рдорд░реНрдерди рдХрд░ рд░рд╣реЗ рд╣реИрдВ?
рдЕрдм рддрдХ рдореИрдВ ItemAt
рдХреА рдУрд░ рдЭреБрдХ рд░рд╣рд╛ рд╣реВрдВред @Dreamescaper , рдХреНрдпрд╛ рдЖрдк рдЕрднреА рднреА рд╡рд╣реАрдВ рд╣реИрдВ? @CharliePoole рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рдерд╛ рдХрд┐ рдЖрдк ElementAt
рд▓рд┐рдП рд╡рд░реАрдпрддрд╛ рд╡реНрдпрдХреНрдд рдХрд░ рд░рд╣реЗ рдереЗ рдпрд╛ рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕реЛрдЪрдиреЗ рдореЗрдВ рд╣рдорд╛рд░реА рд╕рд╣рд╛рдпрддрд╛ рдХрд░ рд░рд╣реЗ рдереЗред
рдЬрд┐рддрдиреЗ рдЕрдзрд┐рдХ рд▓реЛрдЧ Has.ItemAt
/ Has.ElementAt
/ Has.EntryAt
/other рдкрд░ рдЭрдВрдХрд╛рд░ рдХрд░рддреЗ рд╣реИрдВ, рдЙрддрдирд╛ рд╣реА рдЕрдзрд┐рдХ рдЖрддреНрдорд╡рд┐рд╢реНрд╡рд╛рд╕ рд╣рдо рд▓реЛрдЧреЛрдВ рдХреЛ рд╕рд╣рдЬ рдЬреНрдЮрд╛рди рдпреБрдХреНрдд рдкрд╛рдПрдВрдЧреЗред рдореИрдВ рдЗрд╕реЗ рдХреЗрд╡рд▓ рдЙрд╕реА рдХреЗ рд▓рд┐рдП рдХреЙрд▓ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ рдЬреЛ рдЕрдЧрд▓реЗ рджрд┐рди рдпрд╛ рдЙрд╕рдХреЗ рдмрд╛рдж рд▓реАрдб рдореЗрдВ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдпрджрд┐ рд╣рдо рдЗрд╕рд╕реЗ рдЕрдзрд┐рдХ рд╕рдордп рд▓реЗрддреЗ рд╣реИрдВ рддреЛ рд╣рдо рдЗрддрдиреА рдЫреЛрдЯреА рд░рд╛рд╢рд┐ рд╕реЗ 3.13 рд░рд┐рд▓реАрдЬрд╝ рдХреЛ рдпрд╛рдж рдХрд░реЗрдВрдЧреЗред
@jnm2 рдмрд╕ рдЗрд╕реЗ рдЕрдкрдиреЗ рдЖрдк рд╕реЗ рд╕реЛрдЪрдиреЗ рдФрд░ рдЗрд╕реЗ рдкреНрд░реЛрддреНрд╕рд╛рд╣рд┐рдд рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред
рд╢рдмреНрджреЛрдВ рдХрд╛ рдЪрдпрди WRT, рдореИрдВ рд╕реЛрдЪ рд░рд╣рд╛ рдерд╛ рдХрд┐ рдХреНрдпрд╛ рдХреБрдЫ рд╡рд┐рд╢реЗрд╖ рд╢рдмреНрдж рдореЗрд░реЗ рджреНрд╡рд╛рд░рд╛ рд╕реВрдЪреАрдмрджреНрдз рддреАрди рдкреНрд░рдХрд╛рд░ рдХреЗ рднрд╛рд╡реЛрдВ рдХреЗ рд╕рд╛рде рд╕рдмрд╕реЗ рдЕрдЪреНрдЫрд╛ рдХрд╛рдо рдХрд░реЗрдВрдЧреЗ рдФрд░ рдпрд╣ рднреА рдХрд┐ рдХреНрдпрд╛ рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЛрдИ рдЕрдиреНрдп рд╕рдВрдпреЛрдЬрди рд╣реИред рдореИрдВрдиреЗ рдЬрд┐рди рддреАрди рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрд▓реНрд▓реЗрдЦ рдХрд┐рдпрд╛ рд╣реИ, рдЙрдирдХреЗ рд╕рд╛рде рдЖрдкрдХреЗ рдкрд╛рд╕ рд╣реЛрдЧрд╛
Has.ItemAt("foo").EqualTo("bar")
рддреЛ рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рд╕рд╣реА рдХрд╣ рд░рд╣реЗ рд╣реИрдВ рдХрд┐ рдХрд┐рд╕реА рднреА рд╡рд┐рдХрд▓реНрдк рдХреЗ рд▓рд┐рдП рд╢рдмреНрджрд╛рдВрдХрди рдХреЛрдИ рдорд╛рдпрдиреЗ рдирд╣реАрдВ рд░рдЦрддрд╛
рд▓рдВрдмреА рдЕрд╡рдзрд┐ рдХреА рдУрд░ рджреЗрдЦрддреЗ рд╣реБрдП, рдореИрдВ рд╡рд░реНрдЧ рдХреЛрд╖реНрдардХ рдХреЗ рд╕рд╛рде рд╡рд╛рд╕реНрддрд╡рд┐рдХ рдЕрдиреБрдХреНрд░рдордг рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реВрдВрдЧрд╛ред рд▓реЗрдХрд┐рди рдЗрд╕рдХреЗ рд▓рд┐рдП рдХрдХреНрд╖рд╛рдУрдВ рдХреЗ рдПрдХ рд╕реЗрдЯ рдХреЗ рд░реВрдк рдореЗрдВ рдореЙрдбрд▓рд┐рдВрдЧ рдХреЗ рдмрдЬрд╛рдп рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмрд╛рдзрд╛ рдЕрднрд┐рд╡реНрдпрдХреНрддрд┐ рдХреЛ рд╕рдВрдХрд▓рд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред
рдореБрдЭреЗ рдкрддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдореЗрд░реЗ рд╡реЗрддрди-рдЧреНрд░реЗрдб рд╕реЗ рдКрдкрд░ рд╣реИ: рдореБрд╕реНрдХрд╛рди:, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рдореИрдВ рдпрд╣рд╛рдВ рдЭрдВрдХрд╛рд░ рдХрд░реВрдВрдЧрд╛ ...
рдореБрдЭреЗ рдкрд╕рдВрдж рд╣реИ ItemAt
ред
рдореИрдВрдиреЗ рд╕рдордп рдмрд┐рддрд╛рдпрд╛, рдЬреИрд╕рд╛ рдХрд┐ @CharliePoole рдиреЗ рд╕реБрдЭрд╛рд╡ рджрд┐рдпрд╛, рдХреБрдЫ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдХрд░ред рдореБрдЭреЗ рдпрд╣ рд╡рд┐рдЪрд╛рд░ рдЖрдпрд╛ рдХрд┐ ElementAt
рдХрд╛ рдЙрдкрдпреЛрдЧ IEnumerable
рд╕реНрдерд┐рддрд┐рдпреЛрдВ рдореЗрдВ рдЕрдзрд┐рдХ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рднрд╛рд╖рд╛ рдЕрдиреБрдХреНрд░рдордгрд┐рдХрд╛ рдХреЗрд╡рд▓ IEnumerable
рд╕реЗ рдЕрдзрд┐рдХ рд╕рдВрднрд╛рд▓ рд╕рдХрддреЗ рд╣реИрдВред рдореИрдВ рдереЛрдбрд╝реА рджреЗрд░ рдХреЗ рд▓рд┐рдП ElementAt
рдмрд╛рдбрд╝ рдкрд░ рдмреИрдард╛, рдлрд┐рд░ рд╡рд┐рдЪрд╛рд░ рдХрд┐рдпрд╛ рдЧрдпрд╛:
```рд╕реА#
рдЬреЛрд░ рджреЗрдВред рд╡рд╣ (..., Has.ElementAt ("рдПрдХ", "рджреЛ"));
against:
```c#
Assert.That(..., Has.ItemAt("one", "two"));
рдЙрдкрд░реЛрдХреНрдд рдореЗрдВ ItemAt
рдПрдХрд╛рдзрд┐рдХ рдореВрд▓реНрдп рд╕реВрдЪрдХрд╛рдВрдХреЛрдВ рдХреЛ рд╡реНрдпрдХреНрдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд▓рдЧрддрд╛ рд╣реИред
рдореИрдВрдиреЗ рдпрд╣ рднреА рдорд╛рдирд╛ рдХрд┐ рдЯрд┐рдХрдЯ рдореВрд▓ рд░реВрдк рд╕реЗ рд╕рдВрдкрддреНрддрд┐ рдХреА рдХрдореА рдХреЗ рд▓рд┐рдП рд╢реЙрд░реНрдЯ-рд╕рд░реНрдХрд┐рдЯ рдХреЗ рд▓рд┐рдП рдерд╛ рдФрд░ ItemAt
рдЙрд╕ рдХрдерд╛ рдХреЗ рд╕рд╛рде рдлрд┐рдЯ рдмреИрдарддрд╛ рд╣реИред (рд╣рд╛рд▓рд╛рдВрдХрд┐, рдпрд╣ рдЗрд╕реЗ рдХреБрдЫ рдФрд░/рдмреЗрд╣рддрд░/рдЖрджрд┐ рдореЗрдВ рд░реВрдкрд╛рдВрддрд░рд┐рдд рдХрд░рдиреЗ рд╕реЗ рдирд╣реАрдВ рд░реЛрдХрддрд╛ рд╣реИ, рдХреЗрд╡рд▓ рдПрдХ рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣реИ)ред
рдореБрдЭреЗ рднреА рдкрд╕рдВрдж рд╣реИ ItemAt
, рддреЛ рдЪрд▓рд┐рдП рдЗрд╕реЗ рдмрд╣реБрдордд рдХрд╣рддреЗ рд╣реИрдВ рдФрд░ рдЙрд╕ рдХреЗ рдкрдХреНрд╖ рдореЗрдВ рд╢рд╛рд╕рди рдХрд░рддреЗ рд╣реИрдВ
рднреНрд░рдо рдХреЛ рд░реЛрдХрдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдЗрдП рд╕реБрдирд┐рд╢реНрдЪрд┐рдд рдХрд░реЗрдВ рдХрд┐ рдпрд╣ рдкреВрд░рд╛ рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж рдЬрд▓реНрджреА рд╕реЗ рдкреНрд░рд▓реЗрдЦрд┐рдд рд╣реЛ рдЬрд╛рддрд╛ рд╣реИ рдФрд░ рд░рд┐рд▓реАрдЬ рдиреЛрдЯреНрд╕ рдореЗрдВ рд╢рд╛рдорд┐рд▓ рд╣реЛ рдЬрд╛рддрд╛ рд╣реИред
@Poimen Re: рдЖрдкрдХрд╛ рд╡реЗрддрди рдЧреНрд░реЗрдб, рдЗрд╕ рдмрд╛рдд рдХреЛ рдХрдо рдордд рд╕рдордЭреЛ рдХрд┐ рд╣рдо рдпрд╣рд╛рдБ рдХреИрд╕реЗ рдЖрдЧреЗ рдмрдврд╝ рд░рд╣реЗ рд╣реИрдВред рдЕрдкрдиреЗ рд╡рд┐рдЪрд╛рд░реЛрдВ рдХрд╛ рд╕рд╛рдЭрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж!
рдФрд░ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрд╡реЗрддрди рдЧреНрд░реЗрдб рдХреА рдмрд╛рдд рд╣реИ, рдЪреВрдВрдХрд┐ рдпрд╣рд╛рдВ рд╣рд░ рдХреЛрдИ NUnit рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рд▓рдЧрднрдЧ $0 рдХрд╛ рд╡рд╛рд░реНрд╖рд┐рдХ рд╡реЗрддрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рд╕рдорд╛рди рд╡реЗрддрди рдЧреНрд░реЗрдб рдкрд░ рд╣реИрдВ
@Dreamescaper рдиреЗ рдкреАрдЖрд░ рдореЗрдВ рдПрдХ рдФрд░ рдЕрдЪреНрдЫрд╛ рд╕рд╡рд╛рд▓ рдкреВрдЫрд╛ред рд╕рдХрд╛рд░рд╛рддреНрдордХ рдпрд╛ рдирдХрд╛рд░рд╛рддреНрдордХ, рдпрд╣ рдкрд╕рдВрдж рдХрд░рддрд╛ рд╣реИ рдХрд┐ рдпрд╣ рдПрдХ рдЗрдВрдбреЗрдХреНрд╕рд░ рдХреА рдЙрдкрд╕реНрдерд┐рддрд┐ рдХреА рдЬрд╛рдВрдЪ рдХрд░рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдЧрд┐рдирддреА рдХреА рдЬрд╛рдВрдЪ рдХрд░реЗрдЧрд╛:
Assert.That(new[] { 1, 2, 2 }, Has.ItemAt(3));
Assert.That(new[] { 1, 2, 2 }, Has.No.ItemAt(3));
рдЬрдм рддрдХ рд╣рдорд╛рд░реЗ рдкрд╛рд╕ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рд╕реЛрдЪрдиреЗ рдХреЗ рд▓рд┐рдП рдЕрдзрд┐рдХ рд╕рдордп рди рд╣реЛ, рддрдм рддрдХ рдЕрд╕реНрддрд┐рддреНрд╡ рдХреА рдмрд╛рдзрд╛ рдХреЛ рд╣рдЯрд╛рдирд╛ рд╕рдмрд╕реЗ рд╕реБрд░рдХреНрд╖рд┐рдд рд▓рдЧрддрд╛ рд╣реИред рдореИрдВ рдЗрдВрдбреЗрдХреНрд╕рд░ рдЕрд╕реНрддрд┐рддреНрд╡ рдЬрд╛рдВрдЪ рдХреЗ рд▓рд┐рдП Has.Indexer(typeof(Type1), typeof(Type2), ...)
рд▓рд┐рдП рдПрдХ рдЕрд▓рдЧ рдореБрджреНрджрд╛ рдЦреЛрд▓рдирд╛ рдкрд╕рдВрдж рдХрд░реВрдВрдЧрд╛, рдФрд░ Has.ItemAt(arg1, arg2, ...)
рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдЗрдВрдбреЗрдХреНрд╕рд░ рдЪрд▓рд╛рдиреЗ рдФрд░ рдкрд░рд┐рдгрд╛рдореА рдореВрд▓реНрдп рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЪреАрдЬреЛрдВ рдкрд░ рдЬреЛрд░ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдПред
рдХреНрдпрд╛ рдХрд┐рд╕реА рдХреЛ рд╢реБрд░реВ рдореЗрдВ Has.ItemAt(3)
рдХреЛ рдПрдХ рдмрд╛рдзрд╛ рдХрд╛ рд╕рдорд╛рдзрд╛рди рдирд╣реАрдВ рдХрд░рдиреЗ рдФрд░ Has.ItemAt(3).EqualTo(4)
рдХреЛ рд╣рд▓ рдХрд░рдиреЗ рдХреЗ рд░реВрдк рдореЗрдВ рд╢рд┐рдкрд┐рдВрдЧ рдХрд░рдиреЗ рдкрд░ рдЖрдкрддреНрддрд┐ рд╣реЛрдЧреА?
Has.Indexer
рдореБрдЭреЗ рд╕рдордЭ рдореЗрдВ рдЖрддрд╛ рд╣реИред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЖрдк рдЕрдиреНрдп рдмрд╛рдзрд╛рдУрдВ рдХреЗ рд╕рд╛рде рдирд┐рд░рдВрддрд░рддрд╛ рдХреЗ рд▓рд┐рдП Has.Indexer<T>()
, Has.Indexer<T1, T2>()
рдЖрджрд┐ рдХрд╛ рднреА рд╕рдорд░реНрдерди рдХрд░реЗрдВрдЧреЗред
рдлреАрдбрдмреИрдХ рджреЗрдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж! рдореИрдВрдиреЗ Has.ItemAt(...) рдХреЛ рдЕрдм рд╕реНрд╡-рд╕рдорд╛рдзрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреБрд▓ рдЕрдиреБрд░реЛрдз рдкрд░ рдЖрдЧреЗ рдмрдврд╝рдиреЗ рджрд┐рдпрд╛, рдФрд░ рдореИрдВрдиреЗ Has.Indexer
рдХреЛ рдЯреНрд░реИрдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП https://github.com/nunit/nunit/issues/3690 рджрд╛рдпрд░ рдХрд┐рдпрд╛ред Has.Indexer
рдЙрд╕ рдХреНрд╖рдорддрд╛ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред
рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА
рдФрд░ рдЬрд╣рд╛рдВ рддрдХ тАЛтАЛрд╡реЗрддрди рдЧреНрд░реЗрдб рдХреА рдмрд╛рдд рд╣реИ, рдЪреВрдВрдХрд┐ рдпрд╣рд╛рдВ рд╣рд░ рдХреЛрдИ NUnit рдкрд░ рдХрд╛рдо рдХрд░рддреЗ рд╣реБрдП рд▓рдЧрднрдЧ $0 рдХрд╛ рд╡рд╛рд░реНрд╖рд┐рдХ рд╡реЗрддрди рдкреНрд░рд╛рдкреНрдд рдХрд░ рд░рд╣рд╛ рд╣реИ, рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рд╣рдо рд╕рднреА рд╕рдорд╛рди рд╡реЗрддрди рдЧреНрд░реЗрдб рдкрд░ рд╣реИрдВ