Комментарии 23
Тоже хочу себе такую штуку! )
+2
Ну за добавлением автоматически генерируемых врапперов на COM все равно придется лезть в Add reference :)
PS: на фоне остального этого выглядит как-то никак :)
bulbItems.Add(new RefBulbItem(
provider,
r.GetString(2).Trim(),
r.GetString(3).Trim(),
r.GetString(4).Trim()));
PS: на фоне остального этого выглядит как-то никак :)
bulbItems.Add(new RefBulbItem(
provider,
r.GetString(2).Trim(),
r.GetString(3).Trim(),
r.GetString(4).Trim()));
0
Так а что делать? Тут не воспользоваться ни Linq2SQL ни EF.
0
и тут:
if (parent == null || parent.GetType().Name != «ReferenceName» || parent.Parent == null
|| string.IsNullOrEmpty(parent.Parent.GetText()))
return false;
string s = parent.Parent.GetText();
if (string.IsNullOrEmpty(s))
return false;
Нижний if лишний ибо содержится в верхнем
if (parent == null || parent.GetType().Name != «ReferenceName» || parent.Parent == null
|| string.IsNullOrEmpty(parent.Parent.GetText()))
return false;
string s = parent.Parent.GetText();
if (string.IsNullOrEmpty(s))
return false;
Нижний if лишний ибо содержится в верхнем
+2
Я конечно, вас уважаю и люблю почитать ваши статьи, но: если мне не изменяет память, в R# есть ф-ция для добавления сборок, автоматом, лучше бы add-in для студии сделали. Плюс я, конечно, всё понимаю, но за наличие var иногда готов «покусать» :).
-3
в R# есть ф-ция для добавления сборок, автоматом
если бы она была в той форме, в которой я описал тут, я бы не писал этот плагин. насколько я помню, в R# есть автодобавление ссылок только при использовании методов LINQ – например пишу
new[]{}.Where()
и R# предлагает «Reference System.Core and import System.Linq»Что касается
var
, этот конструкт очень полезен в случаях когда не знаешь тип возвращаемого значения. А я в чужих API плохо разбираюсь.0
Буквально вчера R# предложил на ConfigurationManager «Reference and import System.Configuration»
0
Значит не только на LINQ влияет. Возможно ссылка была на эту сборку в другом проекте, вот R# ее и поймал. На самом деле я точно алгоритм не знаю. Иногда такая опция появляется, но редко.
0
R# предлагает сделать только для сборок, на которые уже есть ссылки в solution
0
Лень — двигатель прогресса :)
0
кстати, в VS 2010 пофиксили баг с долгой загрузкой списка библиотек при добавлении референсов.
0
Долго не мог понять что значит 2 в степени х :)
0
реестре может, а не регистре?
0
Вместо этого:
var element = GetSelectedElement(false);
if (element == null)
return false;
var parent = element.ToTreeNode().Parent;
if (parent == null || parent.GetType().Name != «ReferenceName» || parent.Parent == null
|| string.IsNullOrEmpty(parent.Parent.GetText()))
return false;
string s = parent.Parent.GetText();
if (string.IsNullOrEmpty(s))
return false;
Можно просто написать:
var element = GetSelectedElement(true);
if(element == null) return false;
var s = element.ShortName;
Но еще правильнее сделать так:
var und = GetSelectedElement(true); // проверяем что мы внутри using-директивы
if(und == null) return false;
if(und.ImportedNamespace != null) return false; // проверяем, что namesapce красный
var s = und. ImportedNamespaceReference .ShortName;
И потом, isAvailable должен быть быстрым. Поэтому код, который лезет в базу данных хорошо бы перенести в свойсво Items, тогда этот когда будет вызываться только если пользователь открывает меню по alt-enter.
И, кстати, можно все это сделать QuickFix-ом, потому что демон уже сам делает проверку всех ссылок, а ваш CA как раз должен возбуждаться только на ошибки:
[QuickFix]
class MyQF: IQuickFix
{
public MyQF(NotResolvedError error)
{
rn = error.Reference.GetElement() as IReferenceName;
// потом в IsAvailable проверить: rn.GetContainignElement(true) != null;
}
…
}
var element = GetSelectedElement(false);
if (element == null)
return false;
var parent = element.ToTreeNode().Parent;
if (parent == null || parent.GetType().Name != «ReferenceName» || parent.Parent == null
|| string.IsNullOrEmpty(parent.Parent.GetText()))
return false;
string s = parent.Parent.GetText();
if (string.IsNullOrEmpty(s))
return false;
Можно просто написать:
var element = GetSelectedElement(true);
if(element == null) return false;
var s = element.ShortName;
Но еще правильнее сделать так:
var und = GetSelectedElement(true); // проверяем что мы внутри using-директивы
if(und == null) return false;
if(und.ImportedNamespace != null) return false; // проверяем, что namesapce красный
var s = und. ImportedNamespaceReference .ShortName;
И потом, isAvailable должен быть быстрым. Поэтому код, который лезет в базу данных хорошо бы перенести в свойсво Items, тогда этот когда будет вызываться только если пользователь открывает меню по alt-enter.
И, кстати, можно все это сделать QuickFix-ом, потому что демон уже сам делает проверку всех ссылок, а ваш CA как раз должен возбуждаться только на ошибки:
[QuickFix]
class MyQF: IQuickFix
{
public MyQF(NotResolvedError error)
{
rn = error.Reference.GetElement() as IReferenceName;
// потом в IsAvailable проверить: rn.GetContainignElement(true) != null;
}
…
}
+1
Вау, спасибо! А какой тип переменной und?
0
Сорри, разобрался. Просто хабр съел скобочки.
Кстати, насчет QuickFix — несогласен. :) Иногда пространство имен «разбито» на несколько сборок, и IQuickFix перестал бы мне давать возможность сделать ссылку на «составную часть» пространства имен.
Но как вариант учту, спасибо.
Кстати, насчет QuickFix — несогласен. :) Иногда пространство имен «разбито» на несколько сборок, и IQuickFix перестал бы мне давать возможность сделать ссылку на «составную часть» пространства имен.
Но как вариант учту, спасибо.
0
Вау, спасибо! А какой тип переменной und?
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Быстрое добавление ссылок или «прощай Add Reference»