Tag: 强类型

你如何使用多种类型的变量?

我经常使用以下方法将对象链接到父母: Video parent; 有时我的对象可以是不同对象类型的子对象,所以我: int parentType; Video parentVideo; // if parent == VIDEO then this will be used Audio parentAudio; // if parent == AUDIO then this will be used 有没有更好的办法? 如何使用可以是不同类型实例的变量? 编辑:当然,如果video和音频inheritance自相同的基类(例如媒体),我可以这样做: Media parent; 但如果父母不inheritance同一个基类怎么办?

强类型数据集与弱类型数据集

.Net中强类型数据集的含义是什么? 任何人都可以用清晰简洁的例子来解释吗? 而且,强类型数据集和弱类型数据集之间有什么区别?

有没有办法定义现有基本类型的C#强类型别名,如`string`或`int`?

也许我正在certificate我对C#或.NET框架的一些常用function的无知,但我想知道是否有一种本机支持的方法来创建一个类型别名,如EmailAddress ,它别名string但我可以扩展它与我自己的方法,如bool Validate() ? 我知道using x = Some.Type; 别名但这些不是全局的,也不提供类型安全性,即可以为当前文件中的使用别名换出普通string 。 我希望我的EmailAddress是它自己的类型,独立且不能与它所影的string类型互换。 我目前的解决方案是生成public sealed partial EmailAddress : IEquatable, IXmlSerializable带有T4模板的public sealed partial EmailAddress : IEquatable, IXmlSerializable类,生成样板隐式字符串转换运算符和其他类似的东西。 这对我来说很好,并给了我很大的灵活性,但在我的脑海里,我必须生成如此大量的样板代码才能做一些像创建强类型别名一样简单的事情。 也许除了代码生成之外,这是不可能的,但我很好奇其他人是否尝试过与他们的设计相似的东西以及你的经历。 如果没有别的,也许这可以作为假设未来版本的C#中的这种别名function的一个很好的用例。 谢谢! 编辑:我想要的真正价值是能够通过表示数据的不同类型/格式的原始类型获得类型安全性。 例如, EmailAddress和SocialSecurityNumber以及PhoneNumber ,所有这些都使用string作为其基础类型,但它们本身并不是可互换的类型。 我认为这可以让你获得更具可读性和自我记录的代码,更不用说更多方法过载可能性的附加好处,而不是模棱两可。

有没有办法公开强类型资源文件(而不是内部)?

这是我想做的事情: 我想创建一个包含我的资源文件的库项目(即UI标签和诸如此类的东西)。 我想在我的UI和测试中使用资源库。 (即,我从多个项目中引用的资源基本上都有一个共同的位置。) 不幸的是,因为StronglyTypedResourceBuilder(生成资源代码的.Net类)默认使资源文件成为内部资源,所以我不能从另一个项目(即我的UI或测试)中引用我的强类型资源,而不会跳转通过箍(即类似于此处描述的内容,或编写公共包装类/函数)。 不幸的是,这两种解决方案都使我无法保持强类型的引用。 有没有人找到一种直接的方法来创建可以从多个项目中引用的强类型.Net资源? 我宁愿避免使用构建事件来实现这一点(即,做一些事情,比如将’internal’的所有实例替换为’public’,但如果我找不到,那基本上就是我的后备计划一个答案..

将强类型属性名称作为参数传递

我有一个IEnumerable的集合,它被传递给一个填充DropDownList的扩展方法。 我还想将DataValueField和DataTextField作为参数传递,但我希望它们是强类型的。 基本上,我不想为DataValueField和DataTextField参数传递string ,这很容易出错。 public static void populateDropDownList(this DropDownList source, IEnumerable dataSource, Func dataValueField, Func dataTextField) { source.DataValueField = dataValueField; //<– this is wrong source.DataTextField = dataTextField; //<– this is wrong source.DataSource = dataSource; source.DataBind(); } 像这样打电话…… myDropDownList.populateDropDownList(states, school => school.stateCode, school => school.stateName); 我的问题是,如何将强类型的DataValueField和DataTextField作为参数传递给populateDropDownList?

在C#中使用免费generics类型参数模拟委托

这是一个关于语言设计,模式和语义的难题。 请不要因为你没有看到实际价值而进行投票。 首先,让我们考虑一下函数及其参数。 然后我们将看看函数与其参数/参数和generics类/函数及其类型参数/类型参数之间的类比。 函数是代码块,带有一些未指定的值,称为“ 参数 ”。 您提供参数并接收结果。 generics类是具有一些未指定的“ 类型参数 ”的类。 您提供了类型参数 ,然后您可以使用该类 – 调用构造函数或调用静态方法。 非generics类中的generics函数是具有一些未指定的“ 类型参数 ”和一些未指定的“ 值参数 ” 的函数 。 您提供了type-arguments和value-arguments来接收结果。 代表是指向特定function的指针。 创建委托时,不要指定函数参数 ,而是稍后提供它们。 问题是.Net与具有未指定generics类型参数的generics函数没有等效的Delegates。 您以后不能为type-parameters提供类型值 。 我们可以想象代理不仅有自由值参数 ,还有自由类型参数 。 static class SomeClass { //generic function public static T GetValue() { return default(T); } } //creating delegate to generic function or method group […]

做强类型ASP.NET MVC会话的更好方法

我正在开发一个ASP.NET MVC项目,并希望使用强类型的会话对象。 我已实现以下Controller派生类来公开此对象: public class StrongController : Controller where _T : new() { public _T SessionObject { get { if (Session[typeof(_T).FullName] == null) { _T newsession = new _T(); Session[typeof(_T).FullName] = newsession; return newsession; } else return (_T)Session[typeof(_T).FullName]; } } } 这允许我为每个控制器定义一个会话对象,这符合控制器隔离的概念。 是否有更好/更“正确”的方式,也许是微软正式支持的方式?

强在.NET中键入属性名称

假设我有一个属性有一个属性 Public Class MyClass Public Property MyItem() as Object …. End Property End Class 我必须将属性的名称传递给函数调用。 (请不要问为什么应该这样做,它是第三方框架)。 例如 SomeFunc(“MyItem”) 但我想要做的是,将字符串更改为强类型参数。 这意味着,如果重命名或更改属性名称,也应该在此处反映出来。 所以这种类型的东西: Dim objectForStrongTyping as New MyClass() SomeFunc(objectForStrongTyping.MyItem().Name()) 我相信这不会奏效。 有没有办法可以完成这种powershell打字? (C#或VB.NET,任何事情都很酷)

使用ASP.Net MVC3显示包含在byte 中的图像

我有一个强大的观点。 这个强类型有一个由byte []组成的字段,这个数组包含一个图片。 是否可以使用@ Html.Image(Model.myImage)等显示此图像? 非常感谢你

在C#中编译时间reflection

我经常编写C#代码,必须使用魔术字符串来表达属性名称。 每个人都知道魔术弦的问题。 它们很难重构,它们没有编译时间检查,并且通常会导致难以诊断的问题。 然而,C#/ .NET 在整个地方使用它们来表示属性/类/方法名称。 这个问题已持续多年和多年,目前唯一可行的解​​决方案是使用表达式树,然后在运行时解析属性名称。 这可以让您获得令人满意的编译时检查,但它使代码复杂化(需要Expression类型的参数), 并且会产生运行时成本。 有没有人知道是否有一个特性考虑因为C#/ .NET添加编译时reflection来克服这个普遍存在的问题? 它似乎是一个很容易的补充,它将是一个非破坏性的变化,它将使许多开发人员受益匪浅。 typeof()运算符已经执行了编译时reflection的forms,因此看起来运算符nameof()(或类似的东西)将非常互补。 此外,有没有人知道这种function的任何潜在问题? 谢谢您的帮助。