У CSS нет обработчика событий onlclick. Вы должны использовать Javascript.
См. Дополнительную информацию здесь о CSS-псевдоклассах: http://www.w3schools.com/css/css_pseudo_classes.asp
a:link {color:#FF0000;} /* unvisited link - link is untouched */
a:visited {color:#00FF00;} /* visited link - user has already been to this page */
a:hover {color:#FF00FF;} /* mouse over link - user is hovering over the link with the mouse or has selected it with the keyboard */
a:active {color:#0000FF;} /* selected link - the user has clicked the link and the browser is loading the new page */
Это нечто среднее между IGrouping
и словарь. Он позволяет вам группировать элементы вместе по ключу, но затем получать к ним доступ с помощью этого ключа эффективным способом (а не просто перебирать их все, что позволяет делать GroupBy
).
Например, , вы можете взять нагрузку типов .NET и построить поиск по пространству имен ... затем очень легко добраться до всех типов в конкретном пространстве имен:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml;
public class Test
{
static void Main()
{
// Just types covering some different assemblies
Type[] sampleTypes = new[] { typeof(List<>), typeof(string),
typeof(Enumerable), typeof(XmlReader) };
// All the types in those assemblies
IEnumerable<Type> allTypes = sampleTypes.Select(t => t.Assembly)
.SelectMany(a => a.GetTypes());
// Grouped by namespace, but indexable
ILookup<string, Type> lookup = allTypes.ToLookup(t => t.Namespace);
foreach (Type type in lookup["System"])
{
Console.WriteLine("{0}: {1}",
type.FullName, type.Assembly.GetName().Name);
}
}
}
(обычно я бы использовал var
для большинства этих объявлений в обычном коде.)
Можно подумать об этом так: Lookup
аналогичен Dictionary
. По сути, список из нуля или более элементов может быть возвращен с помощью одного и того же ключа.
namespace LookupSample
{
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
static void Main(string[] args)
{
List<string> names = new List<string>();
names.Add("Smith");
names.Add("Stevenson");
names.Add("Jones");
ILookup<char, string> namesByInitial = names.ToLookup((n) => n[0]);
// count the names
Console.WriteLine("J's: {0}", namesByInitial['J'].Count()); // 1
Console.WriteLine("S's: {0}", namesByInitial['S'].Count()); // 2
Console.WriteLine("Z's: {0}", namesByInitial['Z'].Count()); // 0, does not throw
}
}
}
Думаю, вы могли бы аргументировать это так: представьте, что вы создаете структуру данных для хранения содержимого телефонной книги. Вы хотите ввести по lastName, а затем по firstName. Использование словаря здесь было бы опасно, потому что у многих людей может быть одно и то же имя. Таким образом, словарь всегда будет соответствовать одному значению.
Поиск будет отображать потенциально несколько значений.
Поиск ["Смит"] ["Джон"] будет коллекцией размером один миллиард.
Я не использовал его раньше, но вот моя попытка:
A Lookup
будет вести себя примерно как (реляционный) индекс базы данных для таблицы без уникального ограничения. Используйте его там же, где и другой.