这是这个问题的延伸,可能甚至可能是其他一些问题的重复(如果是,请原谅我).我在MSDN上看到泛型通常与集合一起使用
对于泛型类最常见的用途是一个像链表,哈希表,栈,队列,树的集合等在那里,如添加和删除收集的项目操作在几乎相同的方式数据彼此的类型进行不分存储.
我见过的例子也证实了上述说法.
有人可以在不涉及任何集合的现实场景中有效地使用泛型吗?
小心翼翼地,我正在考虑制作一个不涉及收藏的例子
public class Animal<T>
{
public void Speak()
{
Console.WriteLine("I am an Animal and my type is " + typeof(T).ToString());
}
public void Eat()
{
//Eat food
}
}
public class Dog
{
public void WhoAmI()
{
Console.WriteLine(this.GetType().ToString());
}
}
Run Code Online (Sandbox Code Playgroud)
和"动物类型的狗"将是
Animal<Dog> magic = new Animal<Dog>();
完全有可能Dog继承自Animal(假设非泛型版本Animal)Dog:Animal因此Dog 是一个 Animal
我想的另一个例子是 BankAccount.它可以是BankAccount<Checking>,BankAccount<Savings>.这很可能是Checking:BankAccount和Savings:BankAccount.
是否有任何最佳实践来确定我们是否应该使用泛型或继承?
我正在使用jQuery UI对话框进行模态弹出窗口.我的页面中也有一些iframe.iFrame(z-Index = 1500)位于父页面的顶部(z-index = 1000).我从父页面打开模态对话框.我试图使用$('modal')设置z-index.对话框('option','zIndex',3000); 但这不起作用.我也尝试过stack:true(将其叠加在顶部)和.dialog('moveToTop'),但它们似乎不起作用.
这是代码:父页面:
使用样式表:使用脚本从"css/ui-darkness/jquery-ui-1.7.2.custom.css":jquery-1.3.2.min.js && jquery-ui-1.7.2.custom.min.js
<script type="text/javascript" language="javascript">
function TestModal() {
var modal = "<div id='modal'>Hello popup world</div>";
$(modal).dialog({
modal: true,
title: 'Modal Popup',
zIndex: 12000, // settin it here works, but I want to set it at runtime instead of setting it at design time
close: function() {
setTimeout(TestModal, 5000);
$(this).remove();
}
});
$('modal').dialog('option', 'zIndex', 11000); // these dont work
$('modal').dialog('moveToTop'); // these dont work
$('modal').dialog('option', 'stack', true); // these dont work
} …Run Code Online (Sandbox Code Playgroud) 我正在使用log4net和AdoNetAppender.它将所有日志信息记录到表中.该表实际上有2个整数列(可以为null).
这是我的log4net配置的相关部分:
<commandText value="INSERT INTO ActivityLog ([Date],[Thread],[Level],[Logger],[Message],[DealID])
VALUES (@log_date,@thread,@log_level,@logger,@message,@DealID)" />
//other parameters hten DealID
<parameter>
<parameterName value="@DealID" />
<dbType value="Int32" />
<layout type="log4net.Layout.PatternLayout">
<conversionPattern value="%property{DealID}" />
</layout>
</parameter>
Run Code Online (Sandbox Code Playgroud)
我发现的是,如果我没有明确设置使用类似的东西log4net.ThreadContext.Properties["DealID"] = DealID;会引发异常:
System.FormatException occurred
Message="Failed to convert parameter value from a String to a Int32."
Source="System.Data"
StackTrace:
at System.Data.SqlClient.SqlParameter.CoerceValue(Object value, MetaType destinationType)
InnerException: System.FormatException
Message="Input string was not in a correct format."
Source="mscorlib"
StackTrace:
at System.Number.StringToNumber(String str, NumberStyles options, NumberBuffer& number, NumberFormatInfo info, Boolean parseDecimal)
at System.Number.ParseInt32(String s, NumberStyles …Run Code Online (Sandbox Code Playgroud) 我试图用ASP.net/C#设计一个这样的系统.
用户付费下载一些内容(文件 - mp3/PDF,doc等).我应该能够跟踪用户下载的字节数.如果下载的字节数与服务器上的字节数相匹配,我应该在DB中设置一个标志(告知下载成功并阻止他们再次下载文件/要求他们再次支付下载费用).如果下载不完整,他们应该能够再次下载文件而无需再次付款(因为不会设置标志).
有没有办法跟踪客户端成功下载的字节数?
另外,当我在WinXP机器中看到文件大小时,我看到两种尺寸(磁盘大小,大小).我应该考虑哪一个?它会因操作系统而异吗?
我将生产SQL Server放在远程数据中心(并且Web服务器位于同一数据中心).在开发过程中,我们观察到一个特定的视图在我们的本地开发SQL Server中需要很长时间才能执行(大约60-80秒),我们对它很满意.它被提升为生产,当我在Production DB上运行相同的查询时(来自我的本地Management Studio)我看到查询大约需要7分钟,17秒才能运行(可在管理工作室的右下角找到).当我运行一个分析器时,我看到所花费的时间执行该查询是437101微秒 毫秒, 虽然它在7:17出现在管理工作室. ,实际上大约是437101毫秒.我的DBA表示,虽然我看到了探查器和管理工作室的不同数字,但这个视图只需要大约60到80秒.有人可以告诉我这些持续时间在Profiler和管理工作室中意味着什么?
我的猜测:发送最后一个请求字节和从服务器接收最后一个响应字节之间的持续时间.客户端统计信息如下:客户端处理时间:90393总执行时间:92221服务器回复等待时间:1828
我最好猜测分析器上的"持续时间"意味着"SQL Server(优化引擎解析查询,生成查询计划或使用现有查询计划+从不同页面获取记录)所花费的时间来生成结果集这排除了数据通过电线传输到客户端所花费的时间"
编辑:我发现这两个时间大致相同(管理工作室vs分析器).它们与我在客户统计中看到的时间有何关联?
有人可以对这些有更多的了解吗?
请原谅我的无知,我对AD不太了解(让我独自查询AD或谷歌搜索).我想获得特定域中所有用户的列表,他们的名字,姓氏和电子邮件ID.网络管理员(或我的帮助台)是否能够做到这一点?我的另一个选择:我在excel表中有用户名,在另一个文本文件中有全名(在其他数据中 - 比如XXXyy,FirstName LastName-我必须拆分,解析它以提取名称)并在另一个文件中发送电子邮件而没有他们是有序的.可能还有一些丢失的数据:(
通过查询AD,最好的方法是什么?
编辑:可能是我应该更具体.如果我看到我的网络管理员会为了获取这些信息而做什么,他会做什么?
我在我的应用程序的"Cache"文件夹中有一些aspx文件,我不希望HttpModules为该文件夹中的那些文件运行.我尝试在子目录中有一个web.config,但是我知道HttpModules采用了根web.config而不是子目录. 参考文献1,参考文献2.所以我决定将此目录作为子应用程序按照此处和此处的建议.
所以我配置我的应用程序,然后"添加应用程序",将其映射到此目录,该目录已经在此应用程序和繁荣中,它失败了.它适用于静态html文件,但aspx文件不可用.
我的问题是,如何在IIS7中配置子应用程序,以便子应用程序可以拥有自己的web.config,我可以在那里禁用根应用程序的HTTPModule
编辑:事实上我尝试在我的主应用程序中创建一个子应用程序,它不起作用.有人可以指出任何关于如何在IIS7中配置子应用程序的文章吗?
Edit2:添加错误图像.那么我应该如何配置子应用程序池.子应用程序在与父项相同的应用程序池中运行
编辑3:抱歉,孩子正在另一个应用程序池上运行.通用应用程序工作(没有模块).在我试用这些模块后,我正在给出答案.谢谢你的帮助.在我的父应用程序web.config中有一些特定的东西,我现在要追捕它.
替代文字http://i49.tinypic.com/ibjhw4.jpg
编辑:实际上下面提供的答案都是正确的.如果您使用的是IIS7集成模式,那么您的模块应该在system.webServer中,如果是IIS7 - 经典模式,您的模块(和处理程序?)应该在system.web中
我一直试图围绕这个FXCop违规行为"DoNotDeclareReadOnlyMutableReferenceTypes"
MSDN:http://msdn.microsoft.com/en-us/library/ms182302%28VS.80%29.aspx
来自MSDN的代码会导致此违规行为:
namespace SecurityLibrary
{
public class MutableReferenceTypes
{
static protected readonly StringBuilder SomeStringBuilder;
static MutableReferenceTypes()
{
SomeStringBuilder = new StringBuilder();
}
}
}
Run Code Online (Sandbox Code Playgroud)
从Jon 在这里和这里的答案,我理解持有对象引用的字段(在本例中为SomeStringBuilder)是readonly而不是对象本身(由其创建new StringBuilder())
所以以这个例子为例,一旦该字段引用它,我将如何更改对象本身?我喜欢Eric Lippert关于如何更改只读数组的示例,并希望看到类似于任何其他可变引用类型的内容
如果这个问题已被提出,请原谅我.HttpContext.Current.Session["key"]返回一个对象,我们必须Type先将它强制转换为该对象才能使用它.我正在研究类型会话的各种实现
http://www.codeproject.com/KB/aspnet/typedsessionstate.aspx http://weblogs.asp.net/cstewart/archive/2008/01/09/strongly-typed-session-in-asp-net.aspx http://geekswithblogs.net/dlussier/archive/2007/12/24/117961.aspx
如果我们想要将一个新Type的对象添加到会话中,或者作为一个方法或一个单独的包装器,我觉得我们需要在SessionManager中添加一些代码(如果我错了,请更正).我以为我们可以使用泛型
public static class SessionManager<T> where T:class
{
public void SetSession(string key,object objToStore)
{
HttpContext.Current.Session[key] = objToStore;
}
public T GetSession(string key)
{
return HttpContext.Current.Session[key] as T;
}
}
Run Code Online (Sandbox Code Playgroud)
使用是否有任何固有的优势
SessionManager<ClassType>.GetSession("sessionString")
而不是使用
HttpContext.Current.Session["sessionString"] as ClassType
Run Code Online (Sandbox Code Playgroud)
SessionManager["sessionString"] = objToStoreInSession,但发现静态类不能有索引器.有没有其他方法来实现这一目标?
我的想法是创建一个SessionObject,它将存储Type和对象,然后使用密钥将此对象添加到Session(使用SessionManager).检索时,将所有对象强制转换为SessionObject,获取类型(比方说t)和对象(比如说obj)并转换obj为t并返回它.
public class SessionObject
{
public Type type {get;set;}
public Object obj{get;set;}
}
这不会起作用(因为返回签名将是相同的,但返回类型将是不同的).
是否有任何其他优雅的方式以更安全的方式在会话中保存/检索对象
这是我的代码
public interface ITranslator<E, R>
{
E ToEntity<T>(R record);
}
class Gens : ITranslator<string, int>
{
#region ITranslator<string,int> Members
public string ToEntity<MyOtherClass>(int record)
{
return record.ToString();
}
#endregion
}
Run Code Online (Sandbox Code Playgroud)
当我编译它时,我收到一个错误 Type parameter declaration must be an identifier not a type
为什么我不能ToEntity<MyOtherClass>但只能拥有ToEntity<T>?
编辑:正在MyOtherClass做什么?我在多个表/类之间转换实体(相当于实体框架的POCO)和记录(框架返回的对象).所以我想用它来进行我的类特定转换
asp.net ×3
c# ×3
generics ×2
.net ×1
dialog ×1
file ×1
fxcop ×1
http ×1
httphandler ×1
httpmodule ×1
iis-7 ×1
immutability ×1
inheritance ×1
interface ×1
jquery ×1
log4net ×1
modal-dialog ×1
performance ×1
profiling ×1
readonly ×1
session ×1
ssms ×1
string ×1