Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Условие для возвращения нужного значения / 5 сообщений из 5, страница 1 из 1
07.03.2014, 15:50
    #38581277
Slant-shadow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для возвращения нужного значения
Можете подсказать какое условие нужно указать, чтобы возвращалось нужное значение, а не первое попавшееся.
В конкретном примере нужно значение JPG, а возвращается первое PSD
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
public string Format(byte[] content)
        {
            formats.Add(new Data() { name = "PSD", bytes = new byte[] { 56, 66, 80, 83 } });
            formats.Add(new Data() { name = "JPG", bytes = new byte[] { 255, 216, 255, 224 } });
            string extension = "";
            foreach (Data format in formats)
            {
                for (int i = 0; i < format.bytes.Length; i++)
                {
                    
                    if (format.bytes[i] == content[i])
                    {
                        continue;
                     
                    }
                    else
                    
                    if (format.bytes[i] != content[i])
                    {
                       Console.WriteLine("Сравниваемые байты не равны");
                       
                    }
 
                    
               }
 
               extension = format.name;
            }
           
           return extension;
          
       }
...
Рейтинг: 0 / 0
08.03.2014, 04:06
    #38581700
bazile
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для возвращения нужного значения
Slant-shadow, ты говоришь, что код всегда возвращает "PSD", но приведенный пример всегда будет возвращать значение name последнего элемента из списка formats. Проблема здесь не в условии, а в неправильном алгоритме.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
public string Format(byte[] content)
{
	foreach (Data format in formats)
	{
		if (content.Length < format.bytes.Length) continue;
		
		bool found = true;
		for (int i = 0; i < format.bytes.Length; i++)
		{
			if (format.bytes[i] != content[i])
			{
				found = false;
				break;
			}
		}
		
		if (found) return format.name;
	}
	
	return "";
}
...
Рейтинг: 0 / 0
13.03.2014, 22:23
    #38585727
Slant-shadow
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для возвращения нужного значения
Спасибо
...
Рейтинг: 0 / 0
13.03.2014, 23:09
    #38585745
Где-то в степи
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для возвращения нужного значения
Slant-shadow,
можно еще так попробовать
Код: c#
1.
2.
3.
4.
5.
6.
7.
   private readonly Func<IEnumerable<Data>, byte[], Data> Func = (list, bytes) => list.FirstOrDefault(a => a.bytes.SequenceEqual(bytes));
        private void Button2Click(object sender, EventArgs e)
        {  
            formats.Add(new Data() { name = "PSD", bytes = new byte[] { 56, 66, 80, 83 } });
            formats.Add(new Data() { name = "JPG", bytes = new byte[] { 255, 216, 255, 224 } });
            var res=  Func.Invoke(formats, new byte[] {255, 216, 255, 224});
        }
...
Рейтинг: 0 / 0
14.03.2014, 06:43
    #38585831
Сон Веры Павловны
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Условие для возвращения нужного значения
Где-то в степи,

не лень писать Invoke? Func(formats, ...) дает абсолютно аналогичный результат (и компилится в аналогичный IL).
...
Рейтинг: 0 / 0
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Условие для возвращения нужного значения / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]