小编hat*_*enn的帖子

ASP.NET MVC中的ViewBag如何在幕后工作?

我正在阅读一本关于ASP.NET MVC的书,我想知道以下示例是如何工作的:

示例#1

调节器

public class MyController : Controller
{
    public ActionResult Index()
    {
        ViewBag.MyProperty = 5;

        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

视图

<h1>@ViewBag.MyProperty</h1>
Run Code Online (Sandbox Code Playgroud)

现在我明白了ViewBag是一个动态的对象,所以这是如何设置的属性(虽然我不知道很多关于动态对象,从来没有与他们合作.)但如何看法得到的特定实例ViewBag从控制器,即使我们没有直接传递任何东西?

我认为它ViewBag可能是一个public static对象,但是对它的任何改变都是全局的,它不会特定于视图实例.

你能详细说明这是如何在幕后工作的吗?

例#2

调节器

public class MyController : Controller
{
    public ActionResult Index()
    {
        ViewBag.MyProperty = 5;

        return View();
    }

    public ActionResult Index2()
    {
        ViewBag.MyProperty = 6;

        return View();
    }
}
Run Code Online (Sandbox Code Playgroud)

现在让我们说Index首先调用该方法,然后调用Index2.最后,值ViewBag.MyProperty将最终为6(来自的值Index2).我觉得这不是一件好事,但与此同时我觉得我在思考桌面开发术语.也许与ASP.NET MVC一起使用无关紧要,因为Web是无状态的.是这样的吗?

c# asp.net-mvc dynamic viewbag

33
推荐指数
3
解决办法
4万
查看次数

比较双倍与零

我是Java的新手,我一直在尝试实现一种算法,用于查找立方体方程的根.当我计算判别式并尝试检查其相对于零的位置时,就会出现问题.

如果运行它并输入数字"1 -5 8 -4",输出如下:

1 -5 8 -4
p=-0.333333, q=0.074074
disc1=0.001372, disc2=-0.001372
discriminant=0.00000000000000001236
Discriminant is greater than zero.
Run Code Online (Sandbox Code Playgroud)

我知道问题出现了,因为双打的计算并不准确.通常判别式应为0,但最终为0.00000000000000001236.

我的问题是,避免这种情况的最佳方法是什么?我应该检查数字是否介于epsilon邻域为零之间?还是有更好更精确的方法?

提前感谢您的回答.

import java.util.Scanner;

class Cubical {
    public static void main(String[] args) {
        // Declare the variables.
        double a, b, c, d, p, q, gamma, discriminant;

        Scanner userInput = new Scanner(System.in);
        a = userInput.nextDouble();
        b = userInput.nextDouble();
        c = userInput.nextDouble();     
        d = userInput.nextDouble();

        // Calculate p and q.
        p = (3*a*c - b*b) / (3*a*a);
        q = (2*b*b*b) / (27*a*a*a) …
Run Code Online (Sandbox Code Playgroud)

java double

18
推荐指数
2
解决办法
3万
查看次数

在C#中使用base()

我一直在学习C#,并希望查看一些开源项目,看看一些好的编写代码.我在sourceforge上找到了一个名为Todomoo的项目,有一个令我困惑的部分:

public class Category {

    // Note properties
    private int id = 0;
    private string name = "";
    private Color colour = Color.Gray;

    /// <summary>
    /// Create a new category.
    /// </summary>
    public Category() { }

    /// <summary>
    /// Load a category from the database.
    /// </summary>
    /// <param name="Id">ID of the category</param>
    public Category(int id) : base() {
        Load(id);
    }
Run Code Online (Sandbox Code Playgroud)

base()在其中一个构造函数中使用,但该类不是派生类.那究竟是什么呢?

为什么语法base()是这样而不是:

    public Category(int id) {
        base();
        Load(id);
    }
Run Code Online (Sandbox Code Playgroud)

c# constructor

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

重构静态类以用于依赖注入

我们需要在具有静态方法的代码中使用非托管库.我想在我的代码中将库操作作为依赖项引入.除了具有静态方法之外,库还具有初始化方法和设置方法,两者都是全局的.所以我不能将它包装在一个实例类中,因为如果一个实例更改了一个设置,那么所有其他实例都会受到影响,如果一个实例被初始化,所有其他实例都将被重新初始化.

我想把它作为一个单独的类引入.这样它将在实例类中,但只有一个实例,因此我不必担心更改设置或初始化.您如何看待这种方法?我对依赖注入模式很新,我不确定单例模式是否是一个好的解决方案?您对类似案例的解决方案是什么?

编辑:初始化也接受一个参数,所以我不能只是锁定方法调用,并在每次调用时重新初始化和更改设置.

编辑2:以下是一些方法的签名:

public static void Initialize(int someParameter)
// Parameter can only be changed by re-initalization which
// will reset all the settings back to their default values.

public static float[] Method1(int someNumber, float[] someArray)

public static void ChangeSetting(string settingName, int settingValue)
Run Code Online (Sandbox Code Playgroud)

c# singleton refactoring dependency-injection static-classes

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

在ReSharper模板中使用名称

有没有办法在ReSharper中创建一个大写名称的模板?

例如,我想做这样的事情:

private $type$ _$name$;
public $type$ $uppercase_name$
{
    get { return _$name$; }
    set { _$name$ = value; }
}
Run Code Online (Sandbox Code Playgroud)

所以当我进入" 城市 "时$name$,$uppercase_name$应该自动成为" 城市 ".

resharper

14
推荐指数
1
解决办法
1384
查看次数

窗口模板中的边框边距与WindowChrome一起使用时没有任何效果

我正在图书馆检查WindowChrome课程System.Windows.Shell(v 3.5.41019.1).当我尝试创建Window模板时,模板中Border元素的边距似乎没有效果:

<Window x:Class="WpfApplication7.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:shell="clr-namespace:Microsoft.Windows.Shell;assembly=Microsoft.Windows.Shell"
        Title="MainWindow" Height="350" Width="525" Style="{DynamicResource WindowStyle1}">
    <Window.Resources>
        <Style x:Key="WindowStyle1" TargetType="{x:Type Window}">
<!-- Here is the WindowChrome.-->
            <Setter Property="shell:WindowChrome.WindowChrome">
                <Setter.Value>
                    <shell:WindowChrome />
                </Setter.Value>
            </Setter>
            <Setter Property="Template">
                <Setter.Value>
                    <ControlTemplate TargetType="{x:Type Window}">
<!-- And here is the Border. Its margin has no effect as far as I can tell.-->
                        <Border Margin="25" Background="Red">
                            <AdornerDecorator>
                                <ContentPresenter/>
                            </AdornerDecorator>
                        </Border>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </Window.Resources>
    <Grid>

    </Grid>
</Window>
Run Code Online (Sandbox Code Playgroud)

您认为原因是什么?我想知道,因为我看到有些人使用像*这样的东西:

<Border x:Name="WindowBorder" Margin="{Binding Source={x:Static …
Run Code Online (Sandbox Code Playgroud)

c# wpf xaml windows-shell window-chrome

12
推荐指数
1
解决办法
2832
查看次数

使用MPI_Scatter发送矩阵的列

我正在尝试使用MPI编写矩阵向量乘法程序.我正在尝试将矩阵的列发送到单独的进程并在本地计算结果.最后我做了一个MPI_Reduce使用MPI_SUM操作.

发送矩阵的行很容易,因为C按行主顺序存储数组,但列不是(如果不逐个发送).我在这里读到了这个问题:

MPI_Scatter - 发送2D数组的列

Jonathan Dursi建议使用新的MPI数据类型,这就是我通过根据自己的需要调整代码来完成的工作:

  double matrix[10][10];
  double mytype[10][10];
  int part_size; // stores how many cols a process needs to work on
  MPI_Datatype col, coltype;
  // ...
  MPI_Type_vector(N, 1, N, MPI_DOUBLE, &col);
  MPI_Type_commit(&col);
  MPI_Type_create_resized(col, 0, 1*sizeof(double), &coltype);
  MPI_Type_commit(&coltype);
  // ...
  MPI_Scatter(matrix, part_size, coltype,
              mypart, part_size, coltype,
              0, MPI_COMM_WORLD);

  // calculations...
  MPI_Reduce(local_result, global_result,
             N, MPI_DOUBLE,
             MPI_SUM,
             0, MPI_COMM_WORLD);
Run Code Online (Sandbox Code Playgroud)

这很完美,但我不能说我真的明白它是如何工作的.

  1. 如何MPI_Type_vector存储在内存中?
  2. MPI_Type_create_resized()工作如何以及它究竟做了什么?

请记住,我是MPI的初学者.提前致谢.

c mpi

11
推荐指数
1
解决办法
8639
查看次数

使用异常处理(可能更改)库的错误代码

假设您正在使用返回错误代码的库.您想为库编写一个包装器,并且您希望在代码中处理异常错误.

如果该库仍由其他人开发,并且如果错误代码可能会更改(可能会有新的错误代码,可能会有弃用代码,或者某些错误代码可能会略有改变),您的解决方案是什么?

这就是我现在所处的情况.在我的例子中,库是用C++编写的,我们使用的是C#.该库的编码器说错误代码可能会改变,我必须找到一种方法来处理它.

我们最初的解决方案是:

  1. 创建一个XML文件,其中包含不同类别的错误代码(终端,输入错误等).
  2. Wrapper在启动时获取这些错误代码.
  3. 通过检查错误代码的类别引发相应的异常.

因此,假设一个方法返回错误代码100,然后包装器检查错误代码的类别.如果是终端错误则抛出终端错误异常,如果是用户输入错误则抛出用户输入错误异常.

这应该有效,但我觉得这不是最佳解决方案.我想知道编写的企业软件如何处理错误代码的更改.

你会建议做什么?

编辑:我已经质疑错误代码将会改变的事实,并且库的编码器说代码正在开发中.这是一种算法,所以即使算法的工作方式也会因为它的原始研究而改变(他正在撰写博士论文).所以他说可能会有不同的错误,或者有些可能在将来无关紧要.

c# c++ error-handling exception-handling libraries

11
推荐指数
1
解决办法
853
查看次数

在React Native应用程序中使用ETag缓存JSON响应

在React Native应用程序中实现以下方案的最佳方法是什么?

  1. 向服务器发出HTTP请求,获取JSON响应和ETag标头.
  2. 保存此JSON响应的方式即使在用户重新启动应用程序后仍会保留.
  3. 每当重复此HTTP请求时,发送If-None-Match标头.
    1. 当您收到"未修改"响应时,请使用持久缓存中的版本.
    2. 当您获得"成功"响应(意味着响应已更改)时,使持久缓存无效,保存新响应.

React Native是否有一个开箱即用的组件?如果没有,人们用来处理这个问题的最常见方式是什么?

etag caching http react-native

10
推荐指数
1
解决办法
1631
查看次数

为什么IntPtr不需要unsafe关键字?

当您使用int*C#中的指针时,您需要使用unsafe关键字,但是当您使用关键字时IntPtr,则不需要.这些有什么区别?他们都可以指向一个地址.

垃圾收集器如何处理这两种类型?他们的处理方式不同吗?如果是这样,有什么区别?如果没有,为什么需要unsafe关键字?

编辑:非常感谢大家到目前为止的答案,但我想知道的是框架和垃圾收集器如何处理它们,而不是MSDN的定义IntPtr.只需要一次谷歌搜索即可.我想知道为什么IntPtr不需要unsafe关键字?我想了解为什么我们可以在没有关键字的情况下使用它.

c# garbage-collection pointers unmanaged intptr

8
推荐指数
1
解决办法
2208
查看次数