当我在TFS中添加错误(工作项)并将其分配给用户时,我希望向该用户发送一封电子邮件.
此外,如果现有错误已更改"已分配给",我希望该用户收到电子邮件.是否可以在TFS 2008中为用户分配更改的错误时向用户发送警报?
上面提到的另一个问题+答案在SO上没有包含正确的答案,适用于此处!
我有一个用于单元测试的方法.此方法的目的是确保一段代码(由委托引用)将抛出特定异常.如果抛出该异常,则单元测试成功.如果没有抛出异常或抛出其他类型异常,则单元测试将失败.
/// <summary>
/// Checks to make sure that the action throws a exception of type TException.
/// </summary>
/// <typeparam name="TException">The type of exception expected.</typeparam>
/// <param name="action">The code to execute which is expected to generate the exception.</param>
public static void Throws<TException>(Action action)
where TException : Exception
{
try
{
action();
}
catch (TException)
{
return;
}
catch (Exception ex)
{
Assert.Fail("Wrong exception was thrown. Exception of type " + ex.GetType() + " was thrown, exception of type …Run Code Online (Sandbox Code Playgroud) 我有以下代码:
public struct Num<T>
{
private readonly T _Value;
public Num(T value)
{
_Value = value;
}
static public explicit operator Num<T>(T value)
{
return new Num<T>(value);
}
}
...
double d = 2.5;
Num<byte> b = (Num<byte>)d;
Run Code Online (Sandbox Code Playgroud)
这段代码编译,令我惊讶.显式转换应该只接受a byte而不是a double.但双重被接受了.当我在转换器中放置断点时,我发现它value已经是byte有价值的2.通过从double到byte的转换应该是显式的.
如果我用ILSpy反编译我的EXE,我会看到下一个代码:
double d = 2.5;
Program.Num<byte> b = (byte)d;
Run Code Online (Sandbox Code Playgroud)
我的问题是:来自哪里的额外演员byte?为什么那里有额外的演员?我的演员去Num<byte>哪儿了?
编辑
结构Num<T>是整个结构,所以没有更多隐藏的额外方法或运算符.
按要求编辑 IL:
IL_0000: nop
IL_0001: ldc.r8 2.5 // Load the double 2.5. …Run Code Online (Sandbox Code Playgroud) 我正在研究一种方法,该方法使用反射来检查参数类型的方法.这个方法遍历ParameterInfo,并且正在对这些参数的类型做些什么.
我总是假设,如果下TypeInfo.IsClass是true,这种类型的一类和派生总是(间接地)从式object(当类型为除object当然本身).所以,如果TypeInfo.IsClass是真的,TypeInfo.BaseType必须设置.
我的假设是错的!有些类不是从类型派生的object.我的假设搞砸了我的代码.
例如:
Type type = typeof(int).MakeByRefType();
Run Code Online (Sandbox Code Playgroud)
type.IsClass会true和type.BaseType会null.
如果你考虑一下,这是合乎逻辑的.我可以通过检查来阻止我的代码崩溃TypeInfo.IsByRef.
现在我的问题是:是否有更多这样的"异国情调"类型(除了ByRef类型和类型object)是一个类(IsClass == true)但没有基类型(BaseType == null)?
在你回答之前:我只是提到那里的类型IsClass == true!我的类型int示例只是一个例子.它可以是任何类型.所以请不要:
答案到目前为止:
T&):在问题中被解密.T*):由Mark Gravell发现.我刚才知道小数以某种方式记住存储一个数字需要多少trailaing零.换句话说:它记住了分数的大小.
例如:
123M.ToString() ==> resuls in: 123
123.00M.ToString() ==> resuls in: 123.00
123.450M.ToString() ==> resuls in: 123.450
Run Code Online (Sandbox Code Playgroud)
我正在寻找一个格式化字符串或另一个技巧来摆脱那些"不需要的"尾随零,但保持有效数字.所以:
123M.ToString() ==> resuls in: 123
123.00M.ToString() ==> resuls in: 123
123.450M.ToString() ==> resuls in: 123.45
Run Code Online (Sandbox Code Playgroud)
删除新字符串末尾的零对我来说不是一个真正的选择,因为那时我必须找出字符串是否包含一个分数,如果是,还必须删除可选的'.'.或','取决于文化等
我有一个带有静态构造函数的类.
我希望在不调用或使用任何成员的情况下调用静态构造函数,但前提是尚未调用构造函数.
我尝试过使用反射.使用反射,我可以调用静态构造函数(很多次),但我不知道它是否已经被调用过.
我该怎么做呢?
编辑
这不仅是我正在谈论的一个班级,它可能更多.可以说,所有标有特殊属性的类.
[DataContract]
public class SearchCriteria
{
[DataMember]
public string CountryID { get; set; }
}
[DataContract]
public class CitySearchCriteria: SearchCriteria
{
[DataMember]
public string CityID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我在我的MVC控制器操作中创建了一个SearchCriteria实例,并尝试将其转换为CitySearchCriteria.
SearchCriteria searchCriteria = new SearchCriteria();
searchCriteria.CountryID = "1";
CitySearchCriteria citySearchCriteria = searchCriteria as CitySearchCriteria;
Run Code Online (Sandbox Code Playgroud)
上述语句后面的"citySearchCriteria"对象显示NULL值.我希望它显示属性,CountryID和CityID,其中CountryID已填充,CityID为空......但它将对象设置为NULL.
这可能是什么解决方案?DataContract有什么用呢?
评论建议,你不能将基数转换为派生:但实际上,我已经在我的视图中成功完成了这一点,它只是在控制器操作中不起作用:
CitySearchCriteria citySearchCriteria = (CitySearchCriteria)Model.SearchCriteria;
Run Code Online (Sandbox Code Playgroud)
这是成功转换的,为什么类似的东西不能在控制器动作中工作呢?
.NET知道很多转换数据类型的方法:
Convert-类;(Try)Parse和ToString等类型中的函数;IConvertable;TypeConverter;因此,如果要将一种数据类型转换为另一种数据类型,我需要知道这两种类型,并且我需要知道要使用哪种转换方法.如果这两种类型中的一种(或两者)是泛型类型,这就变得非常讨厌.
所以我的问题是:我在.NET中有统一(通用)方式将一种数据类型转换为另一种数据类型,这可能会使用所有其他有限的方法吗?
我按照如何:创建多项目模板文章来创建一个模板,该模板将生成包含4个项目的解决方案.我的Root.vstemplate文件包含以下内容
<VSTemplate Version="2.0.0" Type="ProjectGroup"
xmlns="http://schemas.microsoft.com/developer/vstemplate/2005">
<TemplateData>
<Name>Yugasat BeyondAdmin</Name>
<Description>The Yugasat BeyondAdmin Project Template</Description>
<Icon>Icon.ico</Icon>
<ProjectType>CSharp</ProjectType>
</TemplateData>
<TemplateContent>
<ProjectCollection>
<ProjectTemplateLink ProjectName="PresentationLayer">
PresentationLayer\MyTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="BusinessLogicLayer">
BusinessLogicLayer\MyTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="BusinessLogicLayerAPI">
BusinessLogicLayerAPI\MyTemplate.vstemplate
</ProjectTemplateLink>
<ProjectTemplateLink ProjectName="DataAccessLayer">
DataAccessLayer\MyTemplate.vstemplate
</ProjectTemplateLink>
</ProjectCollection>
</TemplateContent>
Run Code Online (Sandbox Code Playgroud)
我将模板复制到[drive]:\Users\[user]\Documents\Visual Studio 2013\Templates\ProjectTemplates\文件夹中.问题是模板未列为多项目模板

所以我可以创建单个项目,但不是包含所有4个项目的解决方案.我的模板文件夹的内容如下

我在csproj文件中有一个包含这些属性组的类库:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
<Prefer32Bit>false</Prefer32Bit>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<PlatformTarget>AnyCPU</PlatformTarget>
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)
如果我在一个解决方案中构建这个项目,该解决方案在"Debug"或"Release"之外的其他构建配置下构建,则该项目的构建将失败,因为它将找不到正确的构建配置.
有没有办法定义即使没有满足任何条件也会运行的默认构建配置?