URL url = new URL("http://host/theimage.jpg");
URLConnection conn = url.openConnection();
InputStream in = conn.getInputStream();
Этого достаточно, чтобы начать тебя? Не знаю, что ты хочешь делать оттуда.
Когда вы определяете перечисление, просто присвойте ему атрибут [Flags], установите значения в степени двойки, и это будет работать следующим образом.
Ничего другого не изменится, кроме передачи нескольких значений в функцию.
Например:
[Flags]
enum DaysOfWeek
{
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64
}
public void RunOnDays(DaysOfWeek days)
{
bool isTuesdaySet = (days & DaysOfWeek.Tuesday) == DaysOfWeek.Tuesday;
if (isTuesdaySet)
//...
// Do your work here..
}
public void CallMethodWithTuesdayAndThursday()
{
this.RunOnDays(DaysOfWeek.Tuesday | DaysOfWeek.Thursday);
}
Для получения дополнительных сведений см. документацию MSDN по типам перечисления .
Редактировать в ответ на дополнения к вопросу.
Вы не сможете использовать это перечисление как есть, если только вы не хотите передать его как массив array / collection / params. Это позволит вам передать несколько значений. Синтаксис flags требует, чтобы Enum был указан как flags (или чтобы изменить язык не предназначенным для него способом).
В моей конкретной ситуации я бы нравится использовать System.DayOfWeek
. System.DayOfWeek нельзя использовать в качестве перечисления [Flags]
, потому что вы не можете его контролировать. Если вы хотите иметь метод, который принимает несколько DayOfWeek
, вам нужно будет использовать ключевое слово params
void SetDays(params DayOfWeek[] daysToSet)
{
if (daysToSet == null || !daysToSet.Any())
throw new ArgumentNullException("daysToSet");
foreach (DayOfWeek day in daysToSet)
{
// if( day == DayOfWeek.Monday ) etc ....
}
}
SetDays( DayOfWeek.Monday, DayOfWeek.Sunday );
В противном случае вы можете создать свои собственные [Flags]
перечисление, как указано многими другими респондентами, и использование побитовых сравнений.
Я второй ответ Рида. Однако при создании перечисления вы должны указать значения для каждого члена перечисления, чтобы получилось своего рода битовое поле. Например:
[Flags]
public enum DaysOfWeek
{
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64,
None = 0,
All = Weekdays | Weekend,
Weekdays = Monday | Tuesday | Wednesday | Thursday | Friday,
Weekend = Sunday | Saturday,
// etc.
}
[Flags]
public enum DaysOfWeek
{
Mon = 1,
Tue = 2,
Wed = 4,
Thur = 8,
Fri = 16,
Sat = 32,
Sun = 64
}
Вы должны указать числа и увеличивать их таким образом, потому что он сохраняет значения поразрядным образом.
Затем просто определите ваш метод, чтобы взять это перечисление
public void DoSomething(DaysOfWeek day)
{
...
}
и вызвать его, сделайте что-то вроде
DoSomething(DaysOfWeek.Mon | DaysOfWeek.Tue) // Both Monday and Tuesday
. Чтобы проверить, было ли включено одно из значений перечисления, проверьте их, используя поразрядные операции, такие как
public void DoSomething(DaysOfWeek day)
{
if ((day & DaysOfWeek.Mon) == DaysOfWeek.Mon) // Does a bitwise and then compares it to Mondays enum value
{
// Monday was passed in
}
}
[Flags]
public enum DaysOfWeek{
Sunday = 1 << 0,
Monday = 1 << 1,
Tuesday = 1 << 2,
Wednesday = 1 << 3,
Thursday = 1 << 4,
Friday = 1 << 5,
Saturday = 1 << 6
}
вызов метода в этом формате
MethodName (DaysOfWeek.Tuesday | DaysOfWeek.Thursday);
Реализовать метод EnumToArray для получения переданных параметров
private static void AddEntryToList(DaysOfWeek days, DaysOfWeek match, List<string> dayList, string entryText) {
if ((days& match) != 0) {
dayList.Add(entryText);
}
}
internal static string[] EnumToArray(DaysOfWeek days) {
List<string> verbList = new List<string>();
AddEntryToList(days, HttpVerbs.Sunday, dayList, "Sunday");
AddEntryToList(days, HttpVerbs.Monday , dayList, "Monday ");
...
return dayList.ToArray();
}
Что-то вроде этого должно показать, что вы ищете:
[Flags]
public enum SomeName
{
Name1,
Name2
}
public class SomeClass()
{
public void SomeMethod(SomeName enumInput)
{
...
}
}
С помощью опубликованных ответов и следующих:
Кажется, я хорошо это понимаю.
Спасибо.
Пометьте перечисление атрибутом [Flags]. Также убедитесь, что все ваши значения являются взаимоисключающими (два значения не могут в сумме равняться другому), например 1,2,4,8,16,32,64 в вашем случае
[Flags]
public enum DayOfWeek
{
Sunday = 1,
Monday = 2,
Tuesday = 4,
Wednesday = 8,
Thursday = 16,
Friday = 32,
Saturday = 64
}
Когда у вас есть метод, который принимает В перечислении DayOfWeek используется побитовый оператор или (|) для одновременного использования нескольких членов. Например:
MyMethod(DayOfWeek.Sunday|DayOfWeek.Tuesday|DayOfWeek.Friday)
Чтобы проверить, содержит ли параметр определенный член, используйте побитовые операторы и (&) с элементом, который вы проверяете.
if(arg & DayOfWeek.Sunday == DayOfWeek.Sunday)
Console.WriteLine("Contains Sunday");
Рид Копси прав, и я бы добавил к исходному сообщению, если бы мог, но я не могу, поэтому мне придется ответить вместо этого.
Опасно просто использовать [Flags] в любом старом перечислении. Я считаю, что вам нужно явно изменить значения перечисления на степени двойки при использовании флагов, чтобы избежать конфликтов в значениях. См. Рекомендации для FlagsAttribute и Enum .