Вы можете использовать flex-box. Это очень легко реализовать и может удовлетворить все ваши требования. Он также отзывчив, что является важным требованием для вас, как вы упомянули в своем вопросе. ] , которые checkboxyes
и headlinecontents
. Обратите внимание, что по умолчанию flex-box выравнивает содержимое по горизонтали, поэтому вам не нужно указывать выравнивание для дочерних элементов.
#container {
width: 100%;
display: flex;
}
Вы хотите, чтобы содержимое вашего диапазона checkboxyes
было выровнено по центру.
Для этого снова вы назначите display: flex
элементу checkboxyes
и выровняете его дочерние элементы по вертикали, используя align-items: center;
.
#checkboxyes {
margin-right: 15px;
display: flex;
align-items: center;
}
Читать больше о flex-box. Вы можете обратиться: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
Имеет ли так или иначе использование свойств в C# с параметрами
Нет. Только можно обеспечить свойство по умолчанию в C# с аргументом, для моделирования индексного доступа (как в словаре):
public T this[string key] {
get { return m_Dictionary[key]; }
set { m_Dictionary[key] = value; }
}
Другие свойства не могут иметь аргументов. Используйте функцию вместо этого. Между прочим, это повторно прокомментировано, чтобы сделать то же в VB, таким образом, другие языки.NET (C# …) могут использовать Ваш код.
Между прочим, Ваш код является излишне сложным. Четыре вещи:
String
идентификатор. Используйте ключевое слово непосредственно.""
?TryGetValue
, это быстрее. Вы запрашиваете словарь дважды.Public Shared Property DictionaryElement(ByVal Key As String) As Object
Get
Dim ret As String
If m_Dictionary.TryGetValue(Key, ret) Then Return ret
Return "" ' Same as String.Empty! '
End Get
Set(ByVal value As Object)
m_Dictionary(Key) = value
End Set
End Property
"Надлежащий" способ сделать это в C# должно создать дочерний класс конкретно для доступа к набору. Это должно или содержать сам набор или иметь внутренние связи с родительским классом.
Вот образец для Вас (с изменениями вроде предложений Grauenwolf):
using System;
using System.Collections.Generic;
public class Test
{
public FakeIndexedPropertyInCSharp DictionaryElement { get; set; }
public Test()
{
DictionaryElement = new FakeIndexedPropertyInCSharp();
}
public class FakeIndexedPropertyInCSharp
{
private Dictionary<string, object> m_Dictionary = new Dictionary<string, object>();
public object this[string index]
{
get
{
object result;
return m_Dictionary.TryGetValue(index, out result) ? result : null;
}
set
{
m_Dictionary[index] = value;
}
}
}
}
class Program
{
static void Main(string[] args)
{
Test t = new Test();
t.DictionaryElement["hello"] = "world";
Console.WriteLine(t.DictionaryElement["hello"]);
}
}
Ваш пример кода кажется мне очень странным дизайном и злоупотреблением тем, для чего предназначаются свойства. Почему не только метод экземпляра AddOrUpdateKey
:
Public Sub AddOrUpdateKey(ByVal Key As String, ByVal Value as Object)
If m_Dictionary.ContainsKey(Key) Then
m_Dictionary(Key) = Value
Else
m_Dictionary.Add(Key, Value)
End If
End Sub
Ваше свойство также возвращается String.Empty
если ключ не существует, но утверждает, что возвратился Object
, ни a String
.
Спасибо Konrad, Alan, Grauenwolf,
В заключение я не могу использовать свойства C# точно таким же образом это в VB.NET... :_( Так или иначе, Ваши ответы было очень полезно для меня, и я, вероятно, возьму это идеи моему коду C#.
В дополнение к ответам на вопрос о свойствах существуют другие положительные стороны. Например,
- Используйте TryGetValue, это быстрее. Вы запрашиваете словарь дважды.
- Ваш метод set не должен тестировать, существует ли значение уже.
Спасибо Sören также с помощью метода не делают соответствий хорошо в моих начальных целях, но благодарит очень много.