【问题标题】:How to randomly set property value如何随机设置属性值
【发布时间】:2020-03-31 23:55:18
【问题描述】:

在 ASP.NET Core 中,我需要将一个属性设置为随机字符串,但随机字符串将由另一个属性生成。属性是

public class State
{
    public int Id {get;set;}
    public string Name {get;set;}
    public string Capital {get;set;}
    public string RandomCapital {get;set;}
}

基本上Capital 将值状态大写作为其值,我需要将RandomCapital 设置为Capital 的随机实例或随机值,我正在尝试使用linq 来实现。在我的控制器中,我所拥有的只是一种生成随机值的方法,但不能将属性设置为随机值。我知道如果我把它放在控制器中,它会生成 x 个随机值,但是如何设置 3 个随机值以创建多项选择测验?

public async Task<IActionResult> SetValues()
{
    Random random = new Random();
    var quiz = _context.States.OrderBy(c => random.Next()).Take(x);
    return View(quiz);
}

【问题讨论】:

    标签: c# linq asp.net-core


    【解决方案1】:
    var rand = new Random();
    var idx = rand.Next(0, _context.States.Count); // get the random index of the item in the list
    var randState = _context.States.ToArray()[idx]; // get random item
    
    // if the capital is the capital of the random state
    var capital = randState.Capital;
    

    【讨论】:

    • 我'不能将索引 [] 应用于 DbSet 类型的表达式',这甚至会设置RandomCapital 的值吗?我需要RandomCapital 拥有价值观
    • @janzen 我为你修好了。对于资本,您需要使用资本清单。还是您的首都是特定州的首都?
    • 好吧,我这样做了,视图给了我一个错误,基本上说,“未找到视图‘印第安纳波利斯’”。它可以选择随机大写,但当我试图将值返回给我的Capitals.cshtml 时,它会将大写作为视图返回,而不是创建新视图。此外,当我使用 var capital = randState.RandomCapital 时,我想将其用作随机变量,我调试并为 RandomCapital 获取 null 我仍在尝试
    • @janzen 如果您有其他问题,比如说“如何设置视图”,您应该提出一个新问题。对于随机资本,正如我之前指出的,我不清楚您的输入/输出是什么。我的回答清楚地显示了如何从列表中获取随机值。这可以是州、首都或其他任何地方。
    • 我知道如何获取随机值,我的问题是如何为属性RandomCapital 设置随机值。我不需要也不想创建新视图,我想将RandomCapital 设置为随机值,然后将该随机值返回给视图
    【解决方案2】:

    如果你有一个测验,你必须想要多个大写字母。所以,这就行了

    var rand = new Random();
    var idx = rand.Next(0, _context.States.Count); 
    var allStates = _context.States.ToArray(); 
    var randState = allStates[idx]; // get random state
    
    // now, you need 3 more states to fill random capital slots
    var allButRandomStates = allStates.Where(s => s.Name != randState.Name).ToList();
    
    // Get 3 additional random capitals via their states
    var stateList = new List<State>(); 
    while (stateList.Count < 3)
    {
        idx = rand.Next(0, allButRandomStates.Count); 
        var st = allButRandomStates[idx]; // get random state
        allButRandomStates.Remove(st);  // remove from where you get it
        stateList.Add(st); // add to where you want it
    }
    // get capitals of your states
    string[] randomCapitals = stateList.Select(s => s.Capital).ToArray();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-04-04
      • 2013-10-20
      • 2022-01-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-19
      • 2014-08-14
      相关资源
      最近更新 更多