Why is it said the property doesn't work? Using CommunityToolkit.MVVM - c#

I have a view model and a property is annotated as ObservableProperty attribute.
Then, I have a method that set the property, but it is underlined with a red like and I get enrror that says the property doesn't exists.
However, if I use the field, it is underlined with a green line that tells that how I am using ObservableProperty, I should to use the property instead of the field.
In fact, the project compile and I can run the application with no problems, but it is a bit annoyed to have many error that really aren't.
My code is this:
[ObservableProperty]
_myVariable;
public void MyMethod()
{
MyVariable = 1;
}
How could i solve this problem?
Thanks.
EDIT: this is an example to can reproduce the problem. This is a view model:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using CommunityToolkit.Mvvm.ComponentModel;
using CommunityToolkit.Mvvm.Input;
namespace MvvmCommunityToolkit
{
public partial class ViewModel : ObservableObject
{
[ObservableProperty]
public int? _dummy;
[ObservableProperty]
public int? _dummy2;
private void MyMethod()
{
Dummy = 0;
Dummy2 = 1;
}
}
}
At first, i don't have errors. To can reproduce this error, I follow this steps:
comment _dummy an its attribute. Here, in the method MyMethod(), both, Dummy and Dummy2 are underlined with red line.
I uncomment _dummy and its attribute. Still Dummy and Dummy2 in the method is marked as error.
I rebuild. It is succedded, but in the method, still Dummy and Dummy2 are marked as error.
I comment _dummy and _dummy2 and its properties. Still in the method, Dummy and Dummy2 are marked as error.
I rebuild. The build fails. It is the expected.
I uncomment _dummy and _dummy2 and its attributes. Then in the method Dummy and Dummy2 now is correct, no marked as error.

Related

Unable to run xaml and c# example [duplicate]

My program uses a class called Time2. I have the reference added to TimeTest but I keep getting the error, 'Time2' is a 'namespace' but is used like a 'type'.
Could someone please tell me what this error is and how to fix it?
namespace TimeTest
{
class TimeTest
{
static void Main(string[] args)
{
Time2 t1 = new Time2();
}
}
}
I suspect you've got the same problem at least twice.
Here:
namespace TimeTest
{
class TimeTest
{
}
... you're declaring a type with the same name as the namespace it's in. Don't do that.
Now you apparently have the same problem with Time2. I suspect if you add:
using Time2;
to your list of using directives, your code will compile. But please, please, please fix the bigger problem: the problematic choice of names. (Follow the link above to find out more details of why it's a bad idea.)
(Additionally, unless you're really interested in writing time-based types, I'd advise you not to do so... and I say that as someone who does do exactly that. Use the built-in capabilities, or a third party library such as, um, mine. Working with dates and times correctly is surprisingly hairy. :)
namespace TestApplication // Remove .Controller
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
}
Remove the controller word from namepsace
The class TimeTest is conflicting with namespace TimeTest.
If you can't change the namespace and the class name:
Create an alias for the class type.
using TimeTest_t = TimeTest.TimeTest;
TimeTest_t s = new TimeTest_t();
All the answers indicate the cause, but sometimes the bigger problem is identifying all the places that define an improper namespace. With tools like Resharper that automatically adjust the namespace using the folder structure, it is rather easy to encounter this issue.
You can get all the lines that create the issue by searching in project / solution using the following regex:
namespace .+\.TheNameUsedAsBothNamespaceAndType
If you're working on a big app and can't change any names, you can type a . to select the type you want from the namespace:
namespace Company.Core.Context{
public partial class Context : Database Context {
...
}
}
...
using Company.Core.Context;
someFunction(){
var c = new Context.Context();
}
I had this problem as I created a class "Response.cs" inside a folder named "Response". So VS was catching the new Response () as Folder/namespace.
So I changed the class name to StatusResponse.cs and called new StatusResponse().This solved the issue.
If you are here for EF Core related issues, here's the tip:
Name your Migration's subfolder differently than the Database Context's name.
This will solve it for you.
My error was something like this:
ModelSnapshot.cs error CS0118: Context is a namespace but is used like a type
Please check that your class and namespace name is the same...
It happens when the namespace and class name are the same.
do one thing write the full name of the namespace when you want to use the namespace.
using Student.Models.Db;
namespace Student.Controllers
{
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
List<Student> student = null;
return View();
}
}
if the error is
Line 26:
Line 27: #foreach (Customers customer in Model)
Line 28: {
Line 29:
give the full name space
like
#foreach (Start.Models.customer customer in Model)

CS0246 error while trying to create xUnit tests

I'm not even trying to test anything there yet, just wanted to create an instance of class Book(that I would like to test in the future) in my testing BookTests.cs file. I've added reference to GradeBook.Tests.csproj as whole source code to Gradebook is in the other folder. Yet it still returns CS0246 error : The type or namespace name 'Book' Could not be found.
Are you missing a using directive of assembly reference?
Gradebook.Tests.csproj with directory tree
using System.Collections.Generic;
namespace Gradebook
{
public class Book
{
private List<double> grades;
private string name;
public Book(string name)
{
this.name = name;
grades = new List<double>();
}
public void AddGrade(double grade)
{
grades.Add(grade);
}
}
}
Book.cs
using System;
using Xunit;
namespace GradeBook.Tests
{
public class BookTests
{
[Fact]
public void Test1()
{
//arrange
var book2 = new Book("test");
}
}
}
BookTests.cs
The code is pretty simple as I'm following Pluralsight course C# Fundamentals and I did everything like on the video. Tried also dotnet restore command. Path to project that contains Book.cs is probably correct(when i change something other errors occur). Working on VSC. What am I missing here?
I know it's been 2 months since this has last had an update, but the reason you're having an issue is because you're using the namespace Gradebook in Book.cs, but using GradeBook in BookTests.cs. (Notice the capital B)
Rename it so they're both Gradebook and ensure your directory names are correct and you should have no issues.

I get an error in C# "The type or namespace name does not exist in namespace"

I get an error in C# "The type or namespace name does not exist in namespace". I checked everywhere but it didn't solve my problem here is the main program
using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
using Newtonsoft.Json;
using BlockChainMySelf;
using Formatting = Newtonsoft.Json.Formatting;
namespace BlockChainMySelf
{
class Program
{
static void Main(string[] args)
{
var startTime = DateTime.Now;
BlockChainMySelf.BlockChain StepCoin = new BlockChain();
StepCoin.CreateTransaction(new Transaction("Henry", "MaHesh", 10));
StepCoin.CreateTransaction(new Transaction("lkjsdf", "MaADLKHesh", 15));
StepCoin.CreateTransaction(new Transaction("Henry", "MaHesh", 20));
StepCoin.CreateTransaction(new Transaction("Henry", "MaHesh", 60));
StepCoin.ProcessPendingTransactions("Bill");
And here is the class that I want to call
using System;
using System.Collections.Generic;
using System.Security.Cryptography;
using System.Text;
using Newtonsoft.Json;
using BlockChainMySelf;
using Formatting = Newtonsoft.Json.Formatting;
namespace BlockChainMySelf
{
public class BlockChain
{
IList<Transaction> PendingTransactions = new List<Transaction>();
public IList<Block> Chain { set; get; }
public int Difficulty { set; get; } = 2;
Here are the Screendhots
Main
Class
answerquestion
answerquestion2
The second screenshot in an earlier edit of your question clearly shows the BlockChain class as being 'Miscellaneous Files' in Visual Studio:
The MSDN page for the Miscellaneous Files Project says (emphasis mine):
When a user opens project items, the IDE assigns to the Miscellaneous Files project any items that are not members of any projects in a solution.
Presumably you were in the middle of trying to fix the issue, so you put static in - but that won't work because then you can't create an instance of a BlockChain.
Your question is a duplicate of Visual Studio - project shows up as “Miscellaneous Files”.
The/a solution is to right-click on the bad file in Solution Explorer, remove it from the project, then re-add it, e.g. this answer.
I had this issue... however, I had two classes under the same namespace but in different projects. All I had to do to fix this was to add a reference to the project directly.

Visual Studio 2017 intellisense includes full namespace

Assuming I have two classes called Job and Person with a property called Jobs that is a List<Job>. Inside the constructor when I create a new List<Job> using intellisense it automatically adds the full namespace this.Jobs = new List<Demo.Namespace.Job>(). I just want it to be like this: this.Jobs = new List<Job>(). Any ideas how to solve this?
public class Job
{
}
public class Person
{
public Person()
{
this.Jobs = new List<Demo.Namespace.Job>() // this should be ... new List<Job>();
}
public List<Job> Jobs { get; set; }
}
2 ways of doing that:
Add Manuallu an using
using Demo.Namespace;
on top of the class
Use CTRL+. autocompletion
First put the cursor on the object Job and press CTRL+., then pur an using statement with the first menu options (it's the same as point 1).
That will avoid you to have to specify a full namespace every time.
IF YOU ALREADY KNOW THIS, then you have namespace ambiguity.
Try to just put List as you want to do and check what it says in the error window, it will tell you whatever other class is creating ambiguity, then you will have to adapt the namespaces to be different

'namespace' but is used like a 'type'

My program uses a class called Time2. I have the reference added to TimeTest but I keep getting the error, 'Time2' is a 'namespace' but is used like a 'type'.
Could someone please tell me what this error is and how to fix it?
namespace TimeTest
{
class TimeTest
{
static void Main(string[] args)
{
Time2 t1 = new Time2();
}
}
}
I suspect you've got the same problem at least twice.
Here:
namespace TimeTest
{
class TimeTest
{
}
... you're declaring a type with the same name as the namespace it's in. Don't do that.
Now you apparently have the same problem with Time2. I suspect if you add:
using Time2;
to your list of using directives, your code will compile. But please, please, please fix the bigger problem: the problematic choice of names. (Follow the link above to find out more details of why it's a bad idea.)
(Additionally, unless you're really interested in writing time-based types, I'd advise you not to do so... and I say that as someone who does do exactly that. Use the built-in capabilities, or a third party library such as, um, mine. Working with dates and times correctly is surprisingly hairy. :)
namespace TestApplication // Remove .Controller
{
public class HomeController : Controller
{
public ActionResult Index()
{
return View();
}
}
}
Remove the controller word from namepsace
The class TimeTest is conflicting with namespace TimeTest.
If you can't change the namespace and the class name:
Create an alias for the class type.
using TimeTest_t = TimeTest.TimeTest;
TimeTest_t s = new TimeTest_t();
All the answers indicate the cause, but sometimes the bigger problem is identifying all the places that define an improper namespace. With tools like Resharper that automatically adjust the namespace using the folder structure, it is rather easy to encounter this issue.
You can get all the lines that create the issue by searching in project / solution using the following regex:
namespace .+\.TheNameUsedAsBothNamespaceAndType
If you're working on a big app and can't change any names, you can type a . to select the type you want from the namespace:
namespace Company.Core.Context{
public partial class Context : Database Context {
...
}
}
...
using Company.Core.Context;
someFunction(){
var c = new Context.Context();
}
I had this problem as I created a class "Response.cs" inside a folder named "Response". So VS was catching the new Response () as Folder/namespace.
So I changed the class name to StatusResponse.cs and called new StatusResponse().This solved the issue.
If you are here for EF Core related issues, here's the tip:
Name your Migration's subfolder differently than the Database Context's name.
This will solve it for you.
My error was something like this:
ModelSnapshot.cs error CS0118: Context is a namespace but is used like a type
Please check that your class and namespace name is the same...
It happens when the namespace and class name are the same.
do one thing write the full name of the namespace when you want to use the namespace.
using Student.Models.Db;
namespace Student.Controllers
{
public class HomeController : Controller
{
// GET: Home
public ActionResult Index()
{
List<Student> student = null;
return View();
}
}
if the error is
Line 26:
Line 27: #foreach (Customers customer in Model)
Line 28: {
Line 29:
give the full name space
like
#foreach (Start.Models.customer customer in Model)

Categories

Resources