小编P.B*_*key的帖子

动态绑定与类型推断

C#编程语言中, Bill Wagner说:

许多人将动态绑定与类型推断混淆.类型推断是静态绑定的.编译器在编译时确定类型.例如:

var i = 5;             //i is an int (Compiler performs type inference)
Console.WriteLine(i);  //Static binding to Console.WriteLine(int)
Run Code Online (Sandbox Code Playgroud)

编译器推断i是一个整数.对变量i的所有绑定都使用静态绑定.

现在,根据这些信息和我自己制作的动态场景:

        dynamic i = 5;       //Compiler punts
        Console.WriteLine(i);//This is now dynamically bound
Run Code Online (Sandbox Code Playgroud)

我们知道类型推断是静态约束的.这意味着动态变量无法使用类型推断来确定类型.如何在不使用类型推断的情况下解析动态类型?

更新
要尝试澄清......在运行时我们必须弄清楚我的类型是什么?因为我分配了一个文字,5然后运行时可以推断出它i是一个int.是不是那种类型推断而不是动态绑定?

c# dynamic

3
推荐指数
1
解决办法
834
查看次数

为什么不对字符串的副本进行实习?

鉴于:

        object literal1 = "abc";
        object literal2 = "abc";

        object copiedVariable = string.Copy((string)literal1);

        if (literal1 == literal2)
            Console.WriteLine("objects are equal because of interning");//Are equal

        if(literal1 == copiedVariable)
            Console.WriteLine("copy is equal");
        else
            Console.WriteLine("copy not eq");//NOT equal
Run Code Online (Sandbox Code Playgroud)

这些结果意味着copiedVariable不受字符串实习的影响.为什么?

是否存在这样的情况:对于没有实习的等效字符串是有用的还是由于某些语言细节而导致的这种行为?

c#

3
推荐指数
1
解决办法
101
查看次数

来自path.combine的意外行为

鉴于代码:

   string p = @"C:\Users\Brian";
   string p2 = @"\bin\Debug";
   string result = Path.Combine(p, p2);//result: \bin\Debug
   Console.WriteLine(result);
Run Code Online (Sandbox Code Playgroud)

我希望看到以下结果:

  C:\Users\Brian\bin\Debug
Run Code Online (Sandbox Code Playgroud)

但结果是

  \bin\Debug
Run Code Online (Sandbox Code Playgroud)

如果我初始化 p2 = @"bin\Debug";

然后结果如预期.看看MSDN,这似乎按设计工作:

如果path2不包含根(例如,如果path2不以分隔符或驱动器规范开头),则结果是两个路径的串联,以及插入的分隔符.如果path2包含根,则返回path2.

IMO,在.NET中排除\作为根更有意义.AFAIK,这不是任何Windows操作系统上的有效根(\\可以).然后,我可以组合部分路径,而不用担心部分路径是否以a开头\.

为什么这种方法设计为考虑单个\根?

.net c#

3
推荐指数
1
解决办法
133
查看次数

为什么ApiController需要在方法上使用显式的Http动词?

我正在使用ApiController.我很难理解为什么ApiControllers在某些方面与控制器不同.

采取

public class QuestionCommentController : ApiController
{
    QuestionCommentCRUD crud = new QuestionCommentCRUD();

    // GET api/questioncomment/5
    [HttpGet]
    public string Read(int id)
Run Code Online (Sandbox Code Playgroud)

我习惯于Controller允许我创建方法而不通过Attributes指定合法动词的类型:

public class QuestionCommentController : Controller
{
    QuestionCommentCRUD crud = new QuestionCommentCRUD();

    // GET questioncomment/5
    public string Read(int id)
Run Code Online (Sandbox Code Playgroud)

在后一种情况下,我可以在不指定的情况下执行GET/POST HttpGetAttribute.我发现这种行为令人困惑,原因如下:

  • 现在有两个HttpGet:System.Web.Http.HttpGetSystem.Web.Mvc.HttpGet
  • System.Web.Http.HttpGe需要T,System.Web.Mvc.HttpGet不是需要GET请求
  • ApiController 请求需要一条独特的路线 /api/controller...

Controller让我陷入成功之中.较新的ApiController需要手持.

我注意到默认模板有一个我不理解的语法:

    public void Post([FromBody]string value)
    {
    }
Run Code Online (Sandbox Code Playgroud)

动词是方法名称,还有一些时髦的[FromBody]东西.也许这就是为什么这样设置的原因?ApiController对于这种设计的使用存在哪些假设导致了这种设计?

c# asp.net-mvc-4

3
推荐指数
1
解决办法
1120
查看次数

"操作无法完成,因为DbContext已被处理"异常并且禁用了延迟加载

鉴于:

    public ActionResult List()
    {
        using (var unitOfWork = new UnitOfWork())
        {
            var result = unitOfWork.Repository.Find<EntityAddress>(a => a.PostalCode == "80001");
            //return View(result.ToList());//NO Exception raised with ToList()
            return View(result);//EXCEPTION RAISED IN VIEW DURING ITERATION
        }            
    }
Run Code Online (Sandbox Code Playgroud)

UnitOfWork是一次性的,处理我的DbContext.它还禁用构造函数中的延迟加载:

    public UnitOfWork()
    {
        _dbContext.Configuration.LazyLoadingEnabled = false;
        Repository = new GenericRepository<MyEntities>(_dbContext);            
    }

    public void Dispose()
    {
        Repository.Dispose();
    }
Run Code Online (Sandbox Code Playgroud)

Find<EntityAddress>()实施工程以:

_dbContext.Set<EntityAddress>().Where(predicate) 其中谓词是类型的参数 Expression<Func<EntityAddress, bool>>

为什么即使在禁用延迟加载后也会出现处理异常?

c# asp.net-mvc-3 entity-framework-5

3
推荐指数
1
解决办法
5349
查看次数

如何在webpack-dev-server运行期间更新static index.html页面的bundle.js?

我运行这个命令:

webpack-dev-server --content-base deployment/deployment --hot --inline

这正确地启动了我的网站.然后我更新randomFile.js了错误的语法(插入"abc"),这应该导致lint错误或某种失败.当我保存randomFile.jswebpack报告"webpack:bundle现在有效"并显示我修改的文件以及另外两个文件(dunno为什么其他2个存在).Webpack还报告发出"bundle.js"和"guid.hot-update.json".

该网站不会更新.

我检查了时间戳

deployment/deployment/js/bundle.js

它还没有更新.

webpack.config.js(也有.dev和.prod版本,似乎被webpack-dev-server忽略)

var path = require('path')
var webpack = require('webpack')
var HtmlWebpackPlugin = require('html-webpack-plugin')

module.exports = {
  devtool: 'eval',
  entry: [
    'webpack-hot-middleware/client',
    './src/main.js'
  ],
  output: {
    path: path.join(__dirname, 'deployment/deployment/js'),
    filename: 'bundle.js',
    publicPath: '/'
  },
  plugins: [
    new webpack.optimize.OccurenceOrderPlugin(),
    new webpack.HotModuleReplacementPlugin(),
    new webpack.NoErrorsPlugin()
  ],
  module: {
    loaders: [{
      test: /\.jpg/,
      loader: 'file'
    }, {
      test: /\.css$/,
      loaders: [
        'style?sourceMap',
        'css?modules&importLoaders=1&localIdentName=[path]___[name]__[local]___[hash:base64:5]'
    ]}, {
      test: /\.scss$/,
      loaders: [
         'style?sourceMap', …
Run Code Online (Sandbox Code Playgroud)

webpack

3
推荐指数
1
解决办法
5112
查看次数

Response.Redirect vs Server.Transfer - 重定向为"建议"

所以我阅读了一篇关于Response.Redirect 的文章,与Server.Transfer相比,它表示"它就像一个建议",无论客户是否愿意.这是什么意思?是否有某种事件可以让用户说"好吧我不想重定向到那个页面"?

asp.net

2
推荐指数
1
解决办法
1928
查看次数

ASP.NET - 将PDF发送给用户

我有一个创建PDF的过程.我希望这些PDF是暂时的和短暂的.我希望能够在用户单击按钮时执行以下操作:

string CreatePDF()//returns fileName.pdf
PromptUserToDownloadPDF()
DeletePDF(fileName.pdf)
Run Code Online (Sandbox Code Playgroud)

我想避免必须创建一个清理程序,并处理用户在运行清理时同时创建PDF的任何竞争条件.

在winforms中,我会同步提示用户下载文件.我怎样才能在网上做类似的任务?

更新
请注意,我正在使用第三方应用程序来创建PDF(Apache FOP).基本上我(将)有一个调用命令行的函数:

C:> fop"inputfile""output.pdf"

所以,在记忆中不是一种选择......除非我能以某种方式做到......

string CreatePDF()//returns fileName.pdf
string RecreatePDFInMemory()
DeletePDF(fileName.pdf)
PromptUserToDownloadPDF()
Run Code Online (Sandbox Code Playgroud)

c# asp.net

2
推荐指数
1
解决办法
9163
查看次数

如何对csv导出进行HTML编码

我明白了

 Quattrode® 
Run Code Online (Sandbox Code Playgroud)

从HTML编码为的字符串

Quattrode® 
Run Code Online (Sandbox Code Playgroud)

在Excel 2007中查看时.

常规

        Response.Clear();
        Response.Buffer = true;

        Response.ContentType = "text/comma-separated-values";
        Response.AddHeader("Content-Disposition", "attachment;filename=\"Expired.csv\"");

        Response.RedirectLocation = "export.csv";

        Response.Charset = "";
        //Response.Charset = "UTF-8";//this does not work either.
        EnableViewState = false;

        ExportUtility util = new ExportUtility();

        Response.Write(util.DataGridToCSV(gridViewExport, ","));
Run Code Online (Sandbox Code Playgroud)

基本上DataGridToCSV()使用 HttpUtility.HtmlDecode(stringBuilder.ToString());,我可以使用visual studio的文本可视化工具,看看字符串看起来正确(Quattrode®).

因此,Response过程或Excel对文件的解释中的某些内容不正确.知道怎么解决?


更新
原来在Excel或写字板中无法正确解释.我在记事本中打开它,符号显示正确.

html c# csv asp.net

2
推荐指数
2
解决办法
6687
查看次数

如何使用tr来应用DRY

如何用Razor写下以下声明?

   @{ 
    if (isOddRow)
    {
      <tr class="PadColumns">
    }
    else
    {
      <tr class="PadColumns AlternateRow">
    } 
    //then...
    <td>content</td>
    </tr>
    }
Run Code Online (Sandbox Code Playgroud)

Razor生气,Intellisense破产.

所以我想我的包裹tr's<text>

if (isOddRow)
{
  <text><tr class="PadColumns"></text>
}
Run Code Online (Sandbox Code Playgroud)

...导致运行时解析器错误tr,没有匹配的开始标记.

我想避免申请DRY

   if (isOddRow)
    {
      <tr class="PadColumns">
          //then...
    <td>content</td>
    </tr>
    }
    else
    {
      <tr class="PadColumns AlternateRow">
    //then...
    <td>content</td>
    </tr>
    } 
Run Code Online (Sandbox Code Playgroud)

razor asp.net-mvc-3

2
推荐指数
1
解决办法
56
查看次数